Tom: problem mit include im include

Beitrag lesen

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 :-)