Index-dateien rausfinden?
Julian Finn
- php
0 Cheatah0 Julian Finn0 Cheatah
Hi,
weiß jemand wie ich in php rausfinden kann, wie die index-datei eines verzeichnisses heißt?
Wäre dankbar um tips,
Grüße,
Julian
Hi,
weiß jemand wie ich in php rausfinden kann, wie die index-datei eines verzeichnisses heißt?
analysiere die globale Serverkonfiguration (befrage Deinen Provider nach Lage, Benutzerrechten und ggf. Aufbau der httpd.conf (sofern Apache)) und eventuell vorhandene verzeichnislokale Konfigurationen (gewöhnlich namens .htaccess), und prüfe der Reihe nach alle definierten Defaultdateien auf Existenz. Genauso macht es übrigens der Server.
Cheatah
Hi,
weiß jemand wie ich in php rausfinden kann, wie die index-datei eines verzeichnisses heißt?
analysiere die globale Serverkonfiguration (befrage Deinen Provider nach Lage, Benutzerrechten und ggf. Aufbau der httpd.conf (sofern Apache)) und eventuell vorhandene verzeichnislokale Konfigurationen (gewöhnlich namens .htaccess), und prüfe der Reihe nach alle definierten Defaultdateien auf Existenz. Genauso macht es übrigens der Server.
Cheatah
Moin.
meinte eher, ob es eine Environment-Variable o.Ä. gibt, mit der ich das im Skript rausfinden kann. Da das Ding universell einsetzbar sein soll - auf allen möglichen konfigs, sowohl mit Apache als auch mit IIS als auch sonstwie - und dort ohne umkonfiguriererei laufen soll, dachte ich mir ich frag mal nach ob es irgend eine möglichkeit gibt, die nicht alle verzeichnisse nach allen möglichen "index" und "default" - zusammen mit ".html", ".php", ".htm" und sonstigen kombinationen durchsucht...
Also nochmal: gibbs sowas?
Cheerio,
Julian
Hi,
meinte eher, ob es eine Environment-Variable o.Ä. gibt, mit der ich das im Skript rausfinden kann.
nein. Die Serverkonfiguration ist um einiges komplexer, als dass sie in Environment-Variablen passen würde. Du bräuchtest serverabhängige Methoden, die z.B. prüfen, ob auf eine URI (abhängig von diversen anderen Werten, z.B. dem Accept-Language-Header) ein Redirect stattfindet, wenn ja wohin, ob dort eine .htaccess liegt, ob überhaupt das Filesystem involviert wird usw. In der Regel[1] ist es nämlich nicht mal so, dass spezielle Dateien für einen Request existieren.
Da das Ding universell einsetzbar sein soll
Schreib ein Modul, welches die Serversoftware checkt und die entsprechende Konfiguration sucht und auswertet. Wenn Du's geschafft hast, sag mir bitte bescheid - ich hab mir daran (in Perl) die Zähne ausgebissen (und Apache hätte mir bereits gereicht).
[...] nach allen möglichen "index" und "default" - zusammen mit ".html", ".php", ".htm" und sonstigen kombinationen durchsucht...
Es sind keineswegs nur mögliche Kombinationen. In meiner Config steht beispielsweise "DirectoryIndex index.html[1] index.htm[2] /cgi-bin/index.cgi[3]" (ohne die eckigen Klammern, versteht sich).
Cheatah
[1] PHP[4]
[2] SSI[4]
[3] Ein Script zur alternativen Verzeichnisauflistung.
[4] Wenn am Ende HTML rauskommt, hat die URL auf ".html" oder zumindest ".htm" zu enden (bzw. natürlich auf "/") - alles andere ist Unfug und äußerst benutzerunfreundlich.
Hi Cheatah,
In meiner Config steht beispielsweise "DirectoryIndex index.html[1]
index.htm[2] /cgi-bin/index.cgi[3]" (ohne die eckigen Klammern,
versteht sich).
[4] Wenn am Ende HTML rauskommt, hat die URL auf ".html" oder
zumindest ".htm" zu enden (bzw. natürlich auf "/") - alles andere
ist Unfug und äußerst benutzerunfreundlich.
Deine Anmerkung klingt so, als könntest Du damit beträchtliche Verwirrung
auslösen. Ich mußte sie immerhin mehrfach lesen, um zu verstehen, was
genau Du damit gemeint zu haben scheinst.
Einerseits verstehe ich nicht, was Du gegen Endungen wie *.shtml etc. hast.
Korrekt arbeitende HTTP-Clients werden sich daran nicht stören, und der M$IE
macht eh, was er will. Ich brauche sogar massiv Endungen ungleich *.html,
weil ich eigene Apache-Handler einsetze, welche bestimmte Endungen parsen
und andere nicht - und ich kann in jedem Verzeichnis Dateien jedes beliebigen
Typs haben, weil ich meine Dateien thematisch gruppiere und nicht nach Typen
Andererseits klingt sie im Kontext von DirectoryIndex etwas seltsam, weil
dessen Funktion ja gerade darin besteht, URLs mit "/" am Ende zu verwenden.
Was dann innerhalb dieses Verzeichnisses für Endungen verwendet werden, das
geht den Anwender doch gar nichts an.
Um noch weiter zu gehen: Ich möchte überhaupt nicht, daß er das weiß und ggf.
auf die suboptimale Idee kommt, aus der Existenz einer index.html zu schließen,
er dürfe einen Link darauf setzen, was ich eben genau _nicht_ will, weil ich
durch die Verwendung von DirectoryIndex jederzeit meine Implementierungstechnik
ändern kann, ohne daß er das mitbekommt und ohne daß seine Links brechen.
Viele Grüße
Michael
Hi,
Deine Anmerkung klingt so, als könntest Du damit beträchtliche Verwirrung
auslösen. Ich mußte sie immerhin mehrfach lesen, um zu verstehen, was
genau Du damit gemeint zu haben scheinst.
tut mir leid, das war natürlich nicht meine Absicht.
Einerseits verstehe ich nicht, was Du gegen Endungen wie *.shtml etc. hast.
Dann will ich es Dir gerne sagen:
URLs sind nicht ausschließlich zur automatischen Verarbeitung gedacht. Sie sind auch für den Menschen da - er soll sie sich merken können. Nur hiermit ist der Riesenaufwand mit DNS-Servern zu erklären, und ich glaube, Tim Berners-Lee hatte das auch im Sinn, als er seinen Ausspruch "Good URIs don't change - people change them." prägte.
Warum aber soll es einem Besucher aufgezwungen werden, sich neben einem URL-Pfad auch noch die im Hintergrund verwendete Technik zu merken? Es kann ihm gerade mal abverlangt werden zu realisieren, dass die URL auf Dateiebene endet. Dass es oft ".htm" statt ".html" heißt (bzw. hieß), sollte eigentlich auch heute noch jedem oft genug begegnet sein, um zumindest auf die Idee zu kommen, es mal auszuprobieren. Aber ihn dann auch noch testen zu lassen, ob es nun ".shtml", ".phtml", ".php", ".php3", ".jsp" oder ganz was anderes war - nein, das ist respektlos. Schlimm genug, dass URLs mit "/cgi-bin/" nicht merkbar sind (schon allein wegen des Searchparts, der üblicherweise dabei ist), aber bei "normalen" Seiten ist sowas in meinen Augen eine Frechheit dem Kunden gegenüber.
Wenn HTML rauskommt, hat nicht das Gegenteil behauptet zu werden. Beim Browser kommt garantiert[1] kein SHTML oder PHP an, also hat das nicht in der URL zu stehen.
[1] Eine entsprechende Konfiguration vorausgesetzt :-)
Korrekt arbeitende HTTP-Clients werden sich daran nicht stören,
Nein, das ist sicher wahr. Für den Client gibt es nur die URL.
und der M$IE macht eh, was er will.
Auch der wird kein SSI parsen ;-)
Ich brauche sogar massiv Endungen ungleich *.html,
weil ich eigene Apache-Handler einsetze, welche bestimmte Endungen parsen
und andere nicht
Auch das kannst Du idividuell konfigurieren. Wenn's sein muss, nennst Du die URL auf ".html", und suchst Dir per mod_rewrite o.ä. ein ".html.php" oder ".html.ssi" aus. Ich bin mit meinem ".html=>PHP, .htm=>SSI" schon verflucht faul, was die Konfiguration betrifft.
- und ich kann in jedem Verzeichnis Dateien jedes beliebigen
Typs haben, weil ich meine Dateien thematisch gruppiere und nicht nach Typen
Das ist kein Hindernis :-)
Andererseits klingt sie im Kontext von DirectoryIndex etwas seltsam, weil
dessen Funktion ja gerade darin besteht, URLs mit "/" am Ende zu verwenden.
Was dann innerhalb dieses Verzeichnisses für Endungen verwendet werden, das
geht den Anwender doch gar nichts an.
Da hast Du recht, daher ja auch der Hinweis auf "/" in dem ersten von Dir zitierten Teil. Ich ging einfach davon aus, dass von der Default-Seite auf andere Seiten im selben Verzeichnis zu schließen ist; wenn es also eine index.shtml gibt, gibt es auch eine seite.shtml, anstatt einer seite.html.
Um noch weiter zu gehen: Ich möchte überhaupt nicht, daß er das weiß und ggf.
auf die suboptimale Idee kommt, aus der Existenz einer index.html zu schließen,
er dürfe einen Link darauf setzen, was ich eben genau _nicht_ will, weil ich
durch die Verwendung von DirectoryIndex jederzeit meine Implementierungstechnik
ändern kann, ohne daß er das mitbekommt und ohne daß seine Links brechen.
Das ist ebenfalls über die Serverkonfiguration machbar. Wenn Du von SSI auf PHP wechselst, heißt die Ressource immer noch index.html, wird aber anders vom Server bearbeitet.
Cheatah
Hi Cheatah,
Ich brauche sogar massiv Endungen ungleich *.html,
weil ich eigene Apache-Handler einsetze, welche bestimmte
Endungen parsen und andere nicht
Auch das kannst Du idividuell konfigurieren. Wenn's sein muss,
nennst Du die URL auf ".html", und suchst Dir per mod_rewrite
o.ä. ein ".html.php" oder ".html.ssi" aus.
- und ich kann in jedem Verzeichnis Dateien jedes beliebigen
Typs haben, weil ich meine Dateien thematisch gruppiere und
nicht nach Typen
Das ist kein Hindernis :-)
Für uns beide vielleicht nicht. ;-)
Aber Dein Modell würde uns dazu zwingen, daß jeder meiner Kollegen diese
Mapping-Konfiguration lernen müßte, wenn er für sein Verzeichnis ein
lokales Mapping bauen muß, einfach weil er eine Handvoll neuer Dokumente
anlegen muß.
Mir ist dann doch lieber, daß diese sich auf das konzentrieren können,
was ihr Job ist - nämlich die Inhalte dieser Dateien zu erstellen.
(Und zwar in einer Sprache, die HTML als Teilmenge hat und darüber hinaus
einen Haufen sehr proprietären Gruselwusels, welcher letzten Endes HTML
generiert.)
Unsere Benutzer bekommen eine Navigation geboten - die brauchen keine
URLs zu raten. Und deep links funktionieren per Definition nicht (mangels
Authentifizierung: "Durch diese hohle Gasse müssen Sie kommen").
Insofern nutze ich Datei-Endungen zur Quelltext-Dokumentation - und kann
mir keinen Besucher vorstellen, den das stören würde.
Viele Grüße
Michael
P.S.: Die verwendeten Query-Strings sind nicht nur ungeheuer lang, sondern
ggf. auch noch verschlüsselt.
Zum Glück sieht die keiner - wie schön, daß es Framesets gibt ... ;-)