Hallo,
bin neulich auf folgendes Problem gestoßen. Ich habe einen privaten Linux-Server auf dem u.a. PHP 4.3.2 selbstkompiliert rennt. Läuft auch alles.
Habe ein Skript geschrieben, dass eine Datei inkludiert -> diese Datei inkludiert wieder eine. Und zwar sieht das so aus:
Verzeichnisstruktur:
/
/lib
Das erste Skript liegt in /lib und heißt db.class. Dieses Skript inkludiert ein weiteres Script, das da heißt db_connect.fnc, dieses liegt auch in /lib. In db.class steht die Anweisung include_once("./db_connect.fnc");.
Das 3. Skript liegt in / und heißt index.php. Es inkludiert db.class wie folgt: include_once("./lib/db.class");
So, auf meinem lokalen Server funktioniert das auch.
Nun kam es dazu, dass ich dieses Skript auf einen Server eines Hosting-Anbieters raufgeladen habe.
Dort kamen plötzlich Fehler bei der Inkludierung und open_basedir in restriction effects. Tja, hab vieles probiert.. ./ weggelassen, vollstaendige Pfadangabe. Bis ich dann mal ausprobiert hab, in db.class nicht ./db_connect.fnc sondern include_once("./lib/db_connect.fnc"); was ja eigentlich unlogisch waere, weil es in /lib kein Unterverzeichnis namens lib gibt. Mit der index.php funktioniert das aber. Warum? Bekommt das PHP nicht mehr mit, wenn er beim Inkludieren mehrmals die pwd wechselt? Nehme an, das is irgend ne Option oder evt der safe_mode?
Man koennte es sich von daher erklaeren, dass index.php db.class und db_connect.fnc unabhaengig von einander inkludieren und nicht erkennt, dass db_connect.fnc schon durch db.class ins Leben gerufen wurde und deswegen den relativen Pfad von sich selbst braucht und nich von db.class' Position aus. Das is sehr wichtig fuer mich, da kann ich naemlich mb-weise Skripte umschreiben, wenn das so Gang und Gebe ist.
bin neulich auf folgendes Problem gestoßen. Ich habe einen privaten Linux-Server auf dem u.a. PHP 4.3.2 selbstkompiliert rennt. Läuft auch alles.
Habe ein Skript geschrieben, dass eine Datei inkludiert -> diese Datei inkludiert wieder eine. Und zwar sieht das so aus:
Verzeichnisstruktur:
/
/lib
Das erste Skript liegt in /lib und heißt db.class. Dieses Skript inkludiert ein weiteres Script, das da heißt db_connect.fnc, dieses liegt auch in /lib. In db.class steht die Anweisung include_once("./db_connect.fnc");.
Das 3. Skript liegt in / und heißt index.php. Es inkludiert db.class wie folgt: include_once("./lib/db.class");
So, auf meinem lokalen Server funktioniert das auch.
Nun kam es dazu, dass ich dieses Skript auf einen Server eines Hosting-Anbieters raufgeladen habe.
Dort kamen plötzlich Fehler bei der Inkludierung und open_basedir in restriction effects. Tja, hab vieles probiert.. ./ weggelassen, vollstaendige Pfadangabe. Bis ich dann mal ausprobiert hab, in db.class nicht ./db_connect.fnc sondern include_once("./lib/db_connect.fnc"); was ja eigentlich unlogisch waere, weil es in /lib kein Unterverzeichnis namens lib gibt. Mit der index.php funktioniert das aber. Warum? Bekommt das PHP nicht mehr mit, wenn er beim Inkludieren mehrmals die pwd wechselt? Nehme an, das is irgend ne Option oder evt der safe_mode?
Man koennte es sich von daher erklaeren, dass index.php db.class und db_connect.fnc unabhaengig von einander inkludieren und nicht erkennt, dass db_connect.fnc schon durch db.class ins Leben gerufen wurde und deswegen den relativen Pfad von sich selbst braucht und nich von db.class' Position aus. Das is sehr wichtig fuer mich, da kann ich naemlich mb-weise Skripte umschreiben, wenn das so Gang und Gebe ist.
Kommentar