PHP kann nicht includen...
e7
- php
Hi,
nachdem ich neulich Windows neuinstalliert habe, geistert im Moment ein äußerst merkwürdiges bzw. mir unerklärliches Phänomen auf meinem Apache herum...
Ich habe lokal einen Apache2, PHP4 und MySQL installiert. Jetzt hab ich ein Unterverzeichnis (wohlgemerkt eines) von ca. 10, in dem PHP sich weigert, includes auszuführen...
Erst mal meine Verzeichnisstruktur:
c:\apache\htdocs\
.. _projekte
.... andere
.... auftrag
...... doc
...... inc
.... e7o
...... doc
...... inc
.... ec
.. doc
.. inc
ein bisschen gekürzt und vereinfacht dargestellt...
in htdocs\ selbst liegt ein Projekt, im Unterverzeichnis _projekte\ liegen ein paar andere in eigenen Verzeichnissen.
Nehmen wir jetzt mal die beiden Projekte auftag und e7o (meine neue Website übrigens, d. h. das Verhalten tritt an einer ungünstigen Stelle auf...
In den Verzeichnissen liegt eine Datei, der einfachkeit halber index.php (ist nicht immer so), die mit include die Datei ${id}.php aus dem Unterverzeichnis doc einbaut, also etwa so:
<? include("doc/$id.php"); ?>
index.php?id=seite1 --> doc/seite1.php
In der Seite1.php wird nun aus dem Verzeichnis inc eine zweite Datei included:
<? include("inc/datei.php"); ?>
getcwd() gibt ja den Pfad der index.php aus, also ist ja das Arbeitsverzeichnis auch /_projekte/projektname/, und deshalb sollte es kein Problem sein, über include eine Datei einzubinden.
Eigentlich klappt alles recht gut, bis auf ein include... Mal ein Beispiel:
Ich rufe die Datei index.php?id=seite auf, es wird die Datei doc/seite.php eingebunden, die will inc/datei.php einbinden. Das klappt in allen Verzeichnissen und hat vor der Neuinstallation auch hier geklappt, nur jetzt nicht mehr - beim zweiten Include tritt folgender Fehler auf (alle zwei gelten für das eine Include):
Warning: main(inc\fantasy-name.php): failed to open stream: No such file or directory in C:\apache\htdocs\_projekte\e7o\doc\registrieren.php on line 16
Warning: main(): Failed opening 'inc\datei.php' for inclusion (include_path='.;c:\php4\pear') in C:\apache\htdocs\_projekte\e7o\doc\registrieren.php on line 16
Warum geht das nicht? Woran könnte das liegen? Schon mal vielen Dank im Voraus...
E7
hallo,
etwas viel infos da. die fehlermeldung scheint doch die antwort zu geben. wenn er den file nicht findet, ist er nicht da. vermutlich also der includepath nicht korrekt gesetzt. versuchs doch mal, indem du der datei den absoluten pfad voranstellst....;
gruß, frankx
Hi,
etwas viel infos da
hätte ich geschrieben: "Mein PHP kann die Datei x.php nicht einbinden", hätten sich sofort die netten Leute mit ihrer Glaskugel gemeldet.
die fehlermeldung scheint doch die antwort zu geben. wenn er den file nicht findet, ist er nicht da.
Die Datei ist vorhanden.
vermutlich also der includepath nicht korrekt gesetzt.
Das Problem: In allen anderen Verzeichnissen funktioniert es ja, genau nach dem selben Prinzip.
Ich hab sogar versucht, das Verzeichnis umzubenennen - negativ, dann läuft's auch nicht.
versuchs doch mal, indem du der datei den absoluten pfad voranstellst....;
negativ, klappt leider auch nicht.
E7
Hallo e7.
Warning: main(inc\fantasy-name.php): failed to open stream: No such file or directory in C:\apache\htdocs\_projekte\e7o\doc\registrieren.php on line 16
Warning: main(): Failed opening 'inc\datei.php' for inclusion (include_path='.;c:\php4\pear') in C:\apache\htdocs\_projekte\e7o\doc\registrieren.php on line 16
Bist du sicher, dass Backslashes eine gute Idee sind? Tauscht du diese beim Hochladen in jeder Datei gegen Slashes aus?
Im Allgemeinen arbeite ich beim includen von Dateien grundsätzlich mit $_SERVER['DOCUMENT_ROOT'], womit ich im gleichen Atemzug das Einbinden von externen Dateien verhindere. (Natürlich finden weitere Überprüfungen statt.)
Relative Pfadangaben mögen zwar flexibler sein, können aber schnell einem Verlust der Übersicht mit sich bringen, wenn nicht mehr ersichtlich ist, welche Datei wo wie eingebunden wird.
Einen schönen Sonntag noch.
Gruß, Ashura
Hallo.
Ich wusste doch, dass es dafür etwas gibt:
Lass dir einmal den realpath deiner include-Dateien ausgeben, so, wie sie eingebunden werden sollen.
Einen schönen Sonntag noch.
Gruß, Ashura
Hi,
Bist du sicher, dass Backslashes eine gute Idee sind?
Nein, ich verwende normalerweise /, das hab ich dann falsch abgetippt oder es war gerade der Test als ich den kompletten Pfad vom Explorer rauskopiert hab.
Relative Pfadangaben mögen zwar flexibler sein, können aber schnell einem Verlust der Übersicht mit sich bringen, wenn nicht mehr ersichtlich ist, welche Datei wo wie eingebunden wird.
Das ist bei mir ersichtlich, alle "Hauptdokumente" liegen gesammelt in einem Unterverzeichnis, die Design-Dateien in einem Verzeichnis und die ganzen Hilfsfunktionen/-dateien in einem Verzeichnis.
Zum Thema realpath: Das gibt korrekterweise C:\apache\htdocs\_projekte\e7o aus, und damit müsste das include("inc/datei.php"); auch funktionieren - was es in anderen Verzeichnissen auch tut. Deshalb bin ich ja noch immer auf der Suche, wie man das include beeinflussen kann...
e7
Stopp, zurück, realpath() gibt gar nix aus, der Pfad wird von getcwd() zwei Zeilen weiter ausgegeben...
Hallo E7,
mal nochne dumme Idee...:
include_path='.;c:\php4\pear'
haste die benötigte Datei mal zum testen einfach dareingelegt, ob er sie von da included?
außerdem includest du ja aus dem doc-directory und müsstest da ja erstmal raus include ('../inc/name.php')...;
Frankx
Hi,
mal nochne dumme Idee...:
macht nix, immer her damit ;-)
include_path='.;c:\php4\pear'
haste die benötigte Datei mal zum testen einfach dareingelegt, ob er sie von da included?
mmmhh... dazu müsste ich das Verzeichnis erst mal anlegen... Aber bringt nix, habs getestet, sowohl direkt in diesem Verzeichnis als auch im Unterverzeichnis inc/.
Kann aber auch gar nicht klappen, da include_path ja auch . enthält, und die Datei von diesem Verzeichnis aus auch nicht eingebunden werden kann
außerdem includest du ja aus dem doc-directory und müsstest da ja erstmal raus include ('../inc/name.php')...;
nein, der Pfad wird durch die erste abgerufene Datei festgelegt, d. h. von der datei.php?id=datei2... Aber ich habs noch mal mit ../ davor getestet - negativ.
e7
Hi,
nach langer langer Suche hab ich den Fehler endlich gefunden, mir ist zwar schon viel blödes passiert, aber das auch noch nicht...
Der Dateiname enthielt einen -. Vor der Neuinstallation hab ich die Dateien alle auf CD gesichert, und da ich zu dem Zeitpunkt gerade Kubuntu neu installiert hatte waren auch die Windowspartitionen nicht korrekt eingebunden. D. h. ich hatte zwar Zugriff aber falsch...
Jetzt hat mir der Linuxkernel alle - zu _ in diesem Verzeichnis umgewandelt, und ich hab das natürlich nicht gesehen... Ich hab auf alles im Dateinamen geschaut, nur nicht auf den Strich in der Mitte :(
Trotzdem danke für eure Versuche und Antworten.
*schäm und weg*
e7
Hallo e7,
d.h. bei der fehlersuche hätte es geholfen, wenn du testweise eine eine Test.php erstellt hättest und diese ins selbe Verzeichnis gesteckt und testmäßig included hättest. Dann wäre zumindest klar gewesen, dass es nicht an der Verzeichnisstruktur liegt.
Gruß,
Frankx