Julian Finn: Index-dateien rausfinden?

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

  1. 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

    1. 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

      1. 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.

        1. 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

          • genau wie SelfHTML 8.0.

          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

          1. 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

            1. 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 ... ;-)