Andy: absolute Adressierung bezogen auf Dokumentroot möglich?

Hi,
ich möchte eine Datei einlesen, die sich in einem Schwesterverzeichnis zu der php-Datei befindend. (beide Verzeinisse liegen direkt im Dokumentroot meines Webhosters). Klappt mit relativer Adressierung einwandfrei:

  
$file = file_get_contents('../schwester/datei.txt');  

ich wollte nun mit file_get_contents alternativ absolut zu meinen Dokument-Root bei meinem Webhoster verlinken, wo ich aber ein Fehlermeldung (no stream found etc.) bekam:

  
$file = file_get_contents('/schwester/datei.txt');  

funktioniert diese Art der Referenzierung in PHP bezogen auf den Dokument-Root nicht und geht nur Referenzierung mittels des vollständigen Systempfads, z.B.: /users/meinusername/www/schwester/datei.txt  ?

  1. Hallo,

    ich möchte eine Datei einlesen, die sich in einem Schwesterverzeichnis zu der php-Datei befindend. (beide Verzeinisse liegen direkt im Dokumentroot meines Webhosters). Klappt mit relativer Adressierung einwandfrei:

    klar, kein Thema.

    ich wollte nun mit file_get_contents alternativ absolut zu meinen Dokument-Root bei meinem Webhoster verlinken, wo ich aber ein Fehlermeldung (no stream found etc.) bekam:

    $file = file_get_contents('/schwester/datei.txt');

    Natürlich, weil PHP im Dateisystem des Servers agiert, nicht über HTTP.
    Suchst du vielleicht $_SERVER['DOCUMENT_ROOT']?

    Ciao,
     Martin

    --
    Verliebt:    Er spricht, sie lauscht.
    Verlobt:     Sie spricht, er lauscht.
    Verheiratet: Beide sprechen, und die Nachbarn lauschen.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. Aha, alles klar danke!
      absolute Adressierung bedeutet mit PHP also immer Gesamtpfad im Serverfilesystem. Und mit $_SERVER['DOCUMENT_ROOT'] bliebe das skript dann ja auch bei einem Serverumzug flexibel und funktionsfähig!

      1. Hello,

        Aha, alles klar danke!
        absolute Adressierung bedeutet mit PHP also immer Gesamtpfad im Serverfilesystem. Und mit $_SERVER['DOCUMENT_ROOT'] bliebe das skript dann ja auch bei einem Serverumzug flexibel und funktionsfähig!

        Kommt darauf an, ob der Server-Betreuer die Document Root nach Posix mit abschließedendem Slash oder genauso falsch, wie die meisten anderen (ohne abschließenden Slash) angegeben hat. Das solltest Du dir in einer eigenen kleinen Funktion auf jeden Fall erstmal reparieren. Und in dieser Funktion kannst Du dan auch prüfen, was Dedlfix schon erwähnt hat: ob das Element 'DOCUMENT_ROOT' überhaupt in der $_SERVER-Variable enthalten ist.

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://restaurant-zur-kleinen-kapelle.de
  2. Tach!

    $file = file_get_contents('/schwester/datei.txt');
    funktioniert diese Art der Referenzierung in PHP bezogen auf den Dokument-Root nicht und geht nur Referenzierung mittels des vollständigen Systempfads, z.B.: /users/meinusername/www/schwester/datei.txt  ?

    Dateinamen in PHP beziehen sich nicht auf das DocumentRoot sondern auf das Dateisystem als ganzes. Das DocumentRoot ist jedoch in $_SERVER zu finden (jedoch nicht in jedem Fall, das kann je nach Servereinbindung unterschiedlich sein).

    dedlfix.

  3. moin,

    ich wollte nun mit file_get_contents alternativ absolut zu meinen Dokument-Root bei meinem Webhoster verlinken, wo ich aber ein Fehlermeldung (no stream found etc.) bekam:

    Tipp: Das zweite Argument für file_get_contents() auf TURE setzen.

    Horst

    1. Tach!

      ich wollte nun mit file_get_contents alternativ absolut zu meinen Dokument-Root bei meinem Webhoster verlinken, wo ich aber ein Fehlermeldung (no stream found etc.) bekam:
      Tipp: Das zweite Argument für file_get_contents() auf TURE setzen.

      Der Tipp allein ist nicht besonders sinnvoll. Erstmal soll man da seit PHP5 FILE_USE_INCLUDE_PATH setzen und nicht mehr true. Das kommt zwar funktional momentan auf dasselbe raus, aber wenn man sich mal file_put_contents() anschaut und sieht, dass der Parameter dort mehrere Werte annehmen kann, könnte man auf die Idee kommen, dass das vielleicht später mal erweitert werden wird und es gleich entsprechend anzuwenden, oder es zumindest einheitlich anzuwenden.

      Dann wirkt der Parameter nur, wenn man die Datei relativ angibt, also nicht mit startendem /. Sie relativ vom aktuellen Verzeichnis aus anzugeben, findet sie PHP auch ohne den include_path. Sie im include_path suchen zu lassen ist nur sinnvoll, wenn sie sich nicht mit einer relativen Angabe vom aktuellen Verzeichnis aus finden lässt, wohl aber mit einer relativen Angabe ausgehend von einem der in include_path angegebenen Verzeichnisse.

      Der Tipp hätte also lauten müssen, sich den include_path-Konfigurationsparameter anzuschauen, und zu dann zu prüfen, ob es für den eigenen Anwendungsfall sinnvoll ist, zuerst den include_path zu erweitern, und dann den Dateinamen relativ zum aktuellen Verzeichnis oder zu einem aus dem include_path anzugeben.

      dedlfix.