problem mit include im include
hänschen
- php
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ß
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
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
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ß
Hello,
Hallo,
ich habe Problem mit includes.
Folgende Verzeichnis-/Dateistruktur:
Datei1
Hauptordner
Datei2
Datei3
Unterordner
Datei4
Datei5Nun 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
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ß
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