Tick: PHP Zugriff auf Datein in anderen Verzeichnissen

Hallo,

ich habe eine Frage, wenn sich mein Script z.B. im Verzeichnis:

/www/verzeichnis1/verzeichnis2/verzeichnis3/verzeichnis4/index.php

befindet und ich auf eine XML Datei in

/www/verzeichnis1/anderesverzeichnis5/export.xml

zugreiben möchte. Wie mache ich das am besten? Ein HTTP Request über fetch fände ich suboptmial.

Vielen Dank

Tick

  1. Hallo,

    Wie mache ich das am besten?

    Stichwort: relativer Pfad

    Gruß
    Kalk

    1. Hallo Kalk,

      danke für den kurzen Hinweis. Um beim Beispiel zu bleiben wäre

      .../anderesverzeichnis5/export.xml

      die korrekte Anwendung?

      1. Hallo

        Hallo Kalk,

        danke für den kurzen Hinweis. Um beim Beispiel zu bleiben wäre

        .../anderesverzeichnis5/export.xml

        die korrekte Anwendung?

        Nein, das wäre es nicht. Relativ heißt, dass du von deinem Standort aus den Baum nach oben oder unten verfolgen und bei Bedarf von dort aus eine andere Abzweigung nehmen musst.

        Nehmen wir deine Struktur:

        /www/verzeichnis1/verzeichnis2/verzeichnis3/verzeichnis4/index.php

        und

        /www/verzeichnis1/anderesverzeichnis5/export.xml

        Nach links verfolgt ist das erste gemeinsame Verzeichnis beider Pfade „verzeichnis1“. Also musst du von deinem Skriptverzeichnis aus den Verzeichnisbaum drei Ebenen bis zu „verzeichnis1“ hinunterklettern und dort den Abzweig nach „anderesverzeichnis5“ nehmen um zur Datei „export.xml“ zu gelangen.

        Konkret: ../../../anderesverzeichnis5/export.xml

        Tschö, Auge

        --
        Ein echtes Alchimistenlabor musste voll mit Glasgefäßen sein, die so aussahen, als wären sie beim öffentlichen Schluckaufwettbewerb der Glasbläsergilde entstanden.
        Hohle Köpfe von Terry Pratchett
  2. Tach!

    ich habe eine Frage, wenn sich mein Script z.B. im Verzeichnis:

    /www/verzeichnis1/verzeichnis2/verzeichnis3/verzeichnis4/index.php

    befindet und ich auf eine XML Datei in

    /www/verzeichnis1/anderesverzeichnis5/export.xml

    zugreiben möchte. Wie mache ich das am besten?

    Mit den Dateisystemfunktionen. Oder, weil du sicher das XML verarbeiten möchtest, beispielsweise mit simplexml_load_file() oder DOMDocument::load().

    Ob du den Dateinamen relativ oder absolut angibst, ist nicht weiter wichtig, es muss nur gefunden werden.

    Ein HTTP Request über fetch fände ich suboptmial.

    Das wäre auch statt von der Küche in die Speisekammer zu gehen, einen Auftrag an einen Boten zu vergeben, der an deiner Wohnungstür klingelt, in die Speisekammer gelassen wird, das Zeug nimmt, deine Wohnung verlässt und sich dann bei dir zurückmeldet und dir die Dinge gibt.

    dedlfix.

  3. Hallo Tick,

    was hier der beste Weg ist, hängt ein bisschen von der Projektstruktur ab. Ist /www/verzeichnis1 das Document-Root deines Webs? Sprich: Sind die Ordner v2/v3/v4 und /av5 alle unter deiner Hoheit?

    Bei komplexen Ordnerstrukturen in einem Projekt, sollte man auf relative Adressierung verzichten. Wenn an tausend Stellen im Code kreuz und quer auf irgendwelche Pfade zugegriffen wird, betoniert man damit die Ordnerstruktur des Projekts und ist kaum noch im Stande, irgendwas zu reorganisieren.

    Wenn alle Order im gleichen Document-Root liegen, sollte man sich diesen Ordner von PHP geben lassen ($_SERVER['DOCUMENT_ROOT']) und basierend darauf den Pfad zur Zieldatei aufbauen.

    Zweitens sollte man in einer zentralen Include-Datei Konstanten zu solchen "wohlbekannten Speicherorten" definieren. Wenn die Exporte demnächst irgendwo anders landen, möchtest Du nicht alle Stellen suchen müssen, die darauf referenzieren.

    Wenn z.B. das Document-Root /www/verzeichnis1 ist, solltest Du folgendes schreiben:

    in der Konstanten-Includedatei

    define("EXPORTE", "anderesVerzeichnis5/");
    

    in der index.php

    $exportfile = $_SERVER['DOCUMENT_ROOT'] . EXPORTE . "export.xml";
    

    und mit diesem Dateinamen arbeiten.

    Ganz anders sieht es aus, wenn dein Document-Root tiefer liegt (z.B. /www/verzeichnis1/verzeichnis2/verzeichnis3). In diesem Fall gehört der Exporte-Ordner einem fremden Web, und es ist aus meiner Sicht ganz schlechter Stil, zwei Webs auf einem Server mit Verzeichnisreferenzen zu verkuppeln. Mit $_SERVER['DOCUMENT_ROOT'] kommst Du dann sowieso nicht weiter, du müsstest die EXPORTE Konstante als absoluten Pfad festlegen. Das ist aber riskant - was ist, wenn der Serverbetreiber das zweite Web auf eine andere Maschine legt? Ein Zugriff über HTTP wäre dann aus meiner Sicht tatsächlich der richtige Weg, sofern die Exportdatei über HTTP erreichbar ist. SimpleXML kann z.B. eine XML Datei direkt aus einer http-Ressource laden.

    Dedlfix hat den HTTP-Zugriff zwar gut lächerlich gemacht, aber wenn das DocumentRoot nicht auf /www/verzeichnis1 liegt, dann befindet sich die Speisekammer nicht im gleichen Haus wie die Küche und ein Bote, der genau weiß was er darf und was nicht, könnte eine gute Idee sein.

    Gruß, auch an Trick und Track ;)
    Rolf

    --
    sumpsi - posui - clusi