PHP Problem bei include

Gsus

schwankend^^
ID: 215354
L
22 Mai 2006
1.553
68
Hallo,

ich habe gerade ein kleines Problem bei einem include und weiß leider nicht so genau, woran das liegt... Hoffentlich könnt ihr mir helfen:

Also:
folgendes funktioniert nicht:
PHP:
include('/dev/proflex/admin/templates/site.tpl');
Dabei bekomme ich folgenden Fehler:
Code:
[B]Warning[/B]:  include(/dev/proflex/admin/templates/site.tpl) [[URL="https://localhost/dev/proflex/admin/module/function.include"]function.include[/URL]]: failed to open stream: No such file or directory in [B]C:\xampp\htdocs\dev\proflex\admin\module\admins.php[/B] on line [B]61[/B]

[B]Warning[/B]:  include() [[URL="https://localhost/dev/proflex/admin/module/function.include"]function.include[/URL]]: Failed opening '/dev/proflex/admin/templates/site.tpl' for inclusion (include_path='.;C:\xampp\php\PEAR') in [B]C:\xampp\htdocs\dev\proflex\admin\module\admins.php[/B] on line [B]61[/B]
Allerdings funktioniert folgendes:
PHP:
include($_SERVER['DOCUMENT_ROOT'].'/dev/proflex/admin/templates/site.tpl');
Allerdings sind die Links doch identisch oder irre ich mich da jetzt? Das / am Anfang eines Links steht doch auch für das Root-Vereichnis oder nicht?

Hoffentlich wisst ihr weiter...

mfg
Gsus
 
Das / am Anfang eines Links steht doch auch für das Root-Vereichnis oder nicht?
Für das Root-Verzeichnis deines Dateisystems, das aber (zum Glück) nicht zwingend identisch mit dem Root-Verzeichnis deines öffentlichen "DOCUMENT_ROOT" ist...
Dein Document_Root ist offensichtlich "C:\xampp\htdocs", mit dem ersten Link versuchst du aber auf "C:\dev\proflex\admin\templates\site.tpl" zuzugreifen...
 
Allerdings sind die Links doch identisch oder irre ich mich da jetzt? Das / am Anfang eines Links steht doch auch für das Root-Vereichnis oder nicht?
Nö, tut es nicht. Kannst du auch ganz einfach nachprüfen
PHP:
$dateiname = 'gibtesnurindiesemordner.txt';
include($dateiname);
include('/'.$dateiname);
Beide Varianten greifen die selbe Datei und geben sie entweder aus oder werfen die bekannten Fehlermeldungen
 
Setz ein Punkt vor dem ersten Slash, dann nimmt er das aktuelle Verzeichnis.

PHP:
include('./datei');
anstatt
PHP:
include('/datei');
 
Setz ein Punkt vor dem ersten Slash, dann nimmt er das aktuelle Verzeichnis.
Würde in diesem Fall nicht viel helfen, denn wie man der Fehlermeldung entnehmen kann, befindet sich das Skript mit dem include in "dev\proflex\admin\module", die zu inkludierende Datei aber in "dev\proflex\admin\templates"...
Müsste dann also eher
PHP:
include('../templates/site.tpl');
heißen...
 
Würde in diesem Fall nicht viel helfen, denn wie man der Fehlermeldung entnehmen kann, befindet sich das Skript mit dem include in "dev\proflex\admin\module", die zu inkludierende Datei aber in "dev\proflex\admin\templates"...

Da magst du Recht haben, habe mir das nicht so genau angeschaut.
Als Tipp: In deiner index.php (wenn über diese alles läuft) direkt als Konstante den Pfad zum Hauptordner setzen, z.B. unter PATH. Somit kannst du beim includen folgendes benutzen:
PHP:
include(PATH . 'dev/proflex/admin/templates/site.tpl');
(wahlweise auch mit Slash vor dem dev, je nachdem wie du PATH abspeicherst.
 
Zuletzt bearbeitet:
PHP:
include(PATH . 'dev/proflex/admin/templates/site.tpl');
(wahlweise auch mit Slash vor dem dev, je nachdem wie du PATH abspeicherst.
Aber ist das dann nicht prinzipiell das gleiche als wenn ich:
PHP:
include($_SERVER['DOCUMENT_ROOT'].'dev/proflex/admin/templates/site.tpl');

schreiben würde? Wäre eine extra Konstante dann nicht ein wenig überflüssig?
 
Lustigerweise funktioniert es bei mir und meinem XAMPP ....



Folgende 2 Testdateien :


Quellcode blubber.php :

PHP:
<?php
include("/laber.php");
?>

Quellcode laber.php :

PHP:
<?php
echo "laber.php erfolgreich inkludiert";
?>


Bei Aufruf von blubber.php erscheint bei mir dann auf dem Bildschirm :

laber.php erfolgreich inkludiert.

Die blubber.php befindet sich in einem Unterordner, die laber.php im Document Root.


Funktioniert fehlerfrei.

Kann es sein, dass das an der Apache Konfigurationsdatei httpd.conf liegt ?



NeppNepp
 
Unter / liegt sicher keine PHP-Datei auf einem normalem System :ugly:
 
Bei Aufruf von blubber.php erscheint bei mir dann auf dem Bildschirm :

laber.php erfolgreich inkludiert.

Die blubber.php befindet sich in einem Unterordner, die laber.php im Document Root.


Funktioniert fehlerfrei.
Unter Windows kann das vllt funktionieren, da erkannt werden könnte, dass es sich um einen relativen Pfad und keinen absoluten Pfad handelt (da der Laufwerksbuchstabe fehlt). Durch den include_path könnte es dann funktionieren, da das aktuelle Verzeichnis in diesem aufgelistet ist.
Unter Linux wird es aber nicht funktionieren, da der führende Slash eine gültige Angabe eines absoluten Pfades ist.


chrissel hat dir bereits genannt wie man es richtig macht.