include im include und Pfade

birthdefect
Hallo allerseits.

Ich bin auf seltsame Inkonsistenzen gestoßen:

Datei a.php includiert datei b.php welche
allerdings im unterverzeichnis x steht.

also in a.php steht
include ("x/b.php");

Soweit so gut.

Wenn man in b.php dann frägt, welches das aktuelle
Verzeichnis ist, wird logischerweise jenes von a.php
angegeben, das ja b von a includiert wird.

Und jetzt kommts:

Wenn ich in b.php weiters c.php includiere,
dann müsste ich ja angeben :
include ("x/c.php") insofern c.php im selben
Verzeichnis wie b.php liegt.

Das funktioniert auch.
ABER es funktioniert auch ein einfaches
include ("c.php")
Und wenn es nun im Ordner von a.php AUCH ein
c.php gibt, dann nimmer auch dieses c.php
und sucht gar nicht erst im Ordner x von b.php.

Das finde ich seltsam und ich frage mich , ob das
ohne weiteres auch auf anderen Servern so funktioinert,
bzw. so überhaupt funktionieren DARF.

verwirrt

Ich möchte mich irgendwie nicht darauf verlassen und
frage mich nun, wie ich vorgehen soll.
Ist es besser den Pfad relativ zu a.php oder relativ zu
b.php anzugeben?

Ich finde nirgends Regeln hierzu, die eindeutig
klären, wie der Server vorzugehen hat.
Mauer
daHooligan
das ist vollkommen logisch...
es wird a.php ausgeführt, dabei wird vor dem befehl "include..." gestoppt, der code aus b.php geholt und eingebaut. dann geht es mit der neuen a.php (in der 'include...' durch die befehle aus b.php ersetzt wurde) weiter und vor 'include(c.php)' wird wieder gestoppt und der code aus c.php reinkopiert, natürlich jetzt aus der sicht von a.php. weils ja in der jetzt drin steht.
Eigentlich sollte das einfügen aus dem ordner von b.php nur funktionieren wenn der Pfad da hin explizit angegeben wurde.
ergo wäre es besser, den relativen pfad aus der sicht von a.php anzugeben.
oder alles includes in einen ordner packen. das wäre die sauberste lösung.
birthdefect
Mich hat eben genau diese Inkonsistenz gestört.
PHP ist ja nicht so streng, das wusste ich natürlich,
aber sowas gehört schonmal gesagt.

Danke für die Rückmeldung.

Habe eine modulare Seite, und die
zu inkludierenden Dateien befinden
sich teils in Unterverzeichnissen, deren
Name erst in einer TXT-Datei nachzusehen sind.
Habe eine Variable gemacht, wo dieser Pfad drinnensteht,
im aufrufenden File, da können nun alle
anderen inkludierten Dateien drauf zugreifen,
und falls die nicht definiert ist,
wird diese Unterdatei sich wie eine
eigenständig ausführbare Datei verhalten ...
insofern sie die Hauptdatei des Modules ist.

Das funktioniert ganz gut, ich war mir nur jetzt
nicht sicher, wie das mit den Verzeichnispfaden zu sein hat.

Das ist ja bei CSS wieder anders ... wenn ich in so einem
CSS-File eine Hintergrundgrafik angebe, dann hat diese
einen Pfad relativ zum CSS-File zu haben, und nicht
zum HTML-File, das diese CSS-Datei einbaut.

Mal so, mal so ... Feuerteufel
Teufelswerk!
Chris Hunter
soweit ich das weis, schlagt mich wenn ich mich irre läuft das so ab:

nach includes wird in bestimmten verzeichnissen gesucht, und zwar in denjenigen die in der php.ini angegeben sind(include_path).
zuerst erfolgt die suche im include_path relativ zum arbeitsverzeichnis und danach in dem include_path relativ zum pfad des ausführenden scripts.

hab ne ziemlich doofe idee aber versuchs mal, man müsste halt wissen wie dein ganzes system aufgebaut ist. sicher am anfang einer inc den include_path, setze einen neuen und setze den alten Zustand am ende wieder zurück...

^^ und irgendwie hört es sich jetzt nach ner scheiß idee an.

lol - verzeiht bin seit 6:30 wach hab 12 stunden gearbeitet und bin mir nicht mehr so ganz sicher.. :-D
daHooligan
hört sich doch ganz gut an....

originalen include-path buffern,
neuen setzen
include()
gebufferten include-pfad wieder setzen
Chris Hunter
joa, hört sich so recht genial an, aber irgendwie hat das ganze nen bitteren Beigeschmack den ich derzeit nciht nicht schmecken kann, aber ich kann in schon riechen wenn du weischt was ich meine. Vielleicht kennst du ja auch "dieses" gefühl...
daHooligan
Zitat:
Original von Chris Hunter
joa, hört sich so recht genial an, aber irgendwie hat das ganze nen bitteren Beigeschmack den ich derzeit nciht nicht schmecken kann, aber ich kann in schon riechen wenn du weischt was ich meine. Vielleicht kennst du ja auch "dieses" gefühl...

ich kenn das auch... jetzt studier ich das sogar noch, da entwickelt man doch schon ein gewisses gespür Augenzwinkern