hänschen: problem mit include im include

Hallo,

ich habe Problem mit includes.

Folgende Verzeichnis-/Dateistruktur:

Datei1
Hauptordner
  Datei2
  Datei3
  Unterordner
    Datei4
    Datei5

Nun wird in Datei2 ../Datei1 inkludiert. Doch inkludiere ich Datei2 aus Datei4 heraus funktioniert dieser include nichtmehr. Wie kann ich das Problem lösen?

Gruß

  1. Hallo hänschen,

    bist Du Dir sicher, dass Du die korrekten Pfadangaben gemacht hast? Was gibt der PHP-Parser denn zurück?

    Normalerweise spricht nämlich nichts gegen ein Include im Include, wie Du es nennst ;-)

    Lieben Gruß
    zettelbox

  2. Nun wird in Datei2 ../Datei1 inkludiert. Doch inkludiere ich Datei2 aus Datei4 heraus funktioniert dieser include nichtmehr. Wie kann ich das Problem lösen?

    Schreibe in Datei2 "../../Datei1" und inkludiere diese aus Datei 4.

    Dann gehts.

    Gruss,
    NiX

    1. Hallo,

      ja das ist schon klar, dass das dann funktioniert.

      Doch wenn ich jetzt die Datei2 mal aus dem gleichen Verzeichnis inkludiere müsste es statt ../../Datei1 wieder nur ../Datei1 heißen.
      Das ist mein Problem

      Gruß

  3. Hello,

    Hallo,

    ich habe Problem mit includes.

    Folgende Verzeichnis-/Dateistruktur:

    Datei1
    Hauptordner
      Datei2
      Datei3
      Unterordner
        Datei4
        Datei5

    Nun wird in Datei2 ../Datei1 inkludiert. Doch inkludiere ich Datei2 aus Datei4 heraus funktioniert dieser include nichtmehr. Wie kann ich das Problem lösen?

    Die include-Pfade bestimmen sich immer vom "Hauptscript" aus, also vom ersten, das an den Parser übergeben wird. In dieses werden alle anderen Dateien hineingeladen, auch wenn dies durch eine "Include im Include" geschieht.

    Durch das Starten des PHP-Prozesses mit Datei 4 wird diese zur Hauptdatei.
    Wenn Du nun darin Datei2 includierst, wird diese Bestandteil der Datei4.
    Wenn dieser Bestandteil dann wiederum Datei1 includiert, wird Datei1 quasi von Datei4 als der hauptdatei includiert, und nicht mehr von Datei2, denn diese gibt es zu diesem Zeitpunkt aus der Sicht des Parsers gar nicht mehr.

    Es ist daher sinnvoll, alle Includes in einem gemeinsamen Verzeichnis abzulegen, ihnen einen eineindeutigen Namen zu geben und das include_dir auf dieses Verzeichnis zu setzen.

    Alternativ solltest Du die Dateien über absolute Pfadergänzungen zur Document-Root aufrufen. Die stimmen dann auch wieder aus jeder Ebene heraus.

    Da muss man aber aufpassen, ob die Variable für die Document-Root ($_SERVER['DOCUMENT_ROOT']) richtig eingerichtet ist auf dem Server. Manche Provider schließen sie, weil sie ein Verzeichnis symbolisiert, mit einem Slash ab, andere lassen dies. Richtig[1] ist es, glaube ich, hier ohne Slash. Das musst Du also vorher korrigieren z.B. mit rtrim() http://de3.php.net/manual/en/function.rtrim.php.

    [1] Laut Festlegeung, ich finde es mit Slash richtig, aber das zählt nicht...

    Harzliche Grüße vom Berg
    http://bergpost.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

    1. Hallo,

      alleiniges setzten des include dir bringt nichts?
      Also dass der include_path das Verzeichnis direkt über Datei1 und Hauptordner ist, sodass ich alle includes dann von dort aus z.B. include('Hauptordner/include.php');

      Gruß

      1. Hello,

        alleiniges setzten des include dir bringt nichts?
        Also dass der include_path das Verzeichnis direkt über Datei1 und Hauptordner ist, sodass ich alle includes dann von dort aus z.B. include('Hauptordner/include.php');

        Der Include-Path ist diejenige Pfadanreihung, die PHP bei einem Include automatisch von vorne der Reihe nach durchsucht

        http://de3.php.net/manual/en/ini.core.php#ini.include-path

        Wenn ein absoluter (oder relativer ?) Pfad angegeben wird, sollte dieser Mechanismus außer Kraft gesetzt sein und _nur_ unter dem angegebenen Pfad gescuht werden.

        Mit dem relativen Pfad bin ich mir da im Moment nicht sicher. Besser nochmal ausprobieren, das Manual gibt dazu nichts her auf den ersten Blick.

        Harzliche Grüße vom Berg
        http://bergpost.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)