PHP include($target) funktioniert, file_exists($target) hingegen liefer false

Timdaroxxa

Lieutenant
Registriert
März 2009
Beiträge
954
Hi Leute,

wie schon gesagt, wie kommt es, dass ich Dateien mit include() inkludiert bekomme, aber file_exists() mir trotzdem false zurückgibt?

Ich benutze PHP 5.4.7 mit XAMPP.

Code:
define('SERVER_ROOT' , '');
define('SITE_ROOT' , '');

$target = SERVER_ROOT . '/controllers/' . 'router.php';
if(file_exists($target)) {
    echo "TRUE";
}
require_once(SERVER_ROOT . '/controllers/' . 'router.php');
 
Ja ich hab schonmal in die Doku geschaut :)

Wenn ich auf "safemode" gehe kommt dann aber
Dieses Feature ist seit PHP 5.3.0 DEPRECATED (veraltet) und seit PHP 5.4.0 ENTFERNT.

Ich benutze einen höhere Version, von daher sollte diese ja nicht mehr vorhanden sein?
 
Gutes Argument :-)

Gehen denn andere Datei-Operationen problemlos, z.B. das Auflisten von Dateien?
Hast du schon mal versucht file_exists mit absolutem Pfad aufzurufen?
 
Code:
/controllers/router.php

Das soll der absolute Pfad zu der Datei sein? da fehlt doch einiges vornedran... Wieso das require dann aber funktionieren sollte, verstehe ich nicht so ganz.
 
Mein Server ist 'localhost' von daher sollte da doch nichts vorne dran, oder irre ich mich?
 
Ich bin mir nicht sicher, aber ich glaube, include arbeitet mit dem DocumentRoot, während Datei-Operationen wie file_exists oder auch file() mit dem Server-Root arbeiten.

Wenn also dein DocumentRoot unter /var/www/meineSeite ist und darin die Datei includes/datei.inc liegt, dann kann man sie mit include('/includes/datei.inc') einbinden, weil sich das auf den DocumentRoot bezieht. file_exists sucht den Pfad dann aber ab dem ServerRoot, also müsste der Pfad dafür dann /var/www/meineSeite/includes/datei.inc sein.

Wie gesagt, bin mir nicht ganz sicher, aber ich dachte, das ich auch mal so was hatte und es daran lag.
 
wenn du mit xampp arbeitetst ist dein "localhost" auf filesystem ebene alles bis hin zum htdocs ordner.
also
c:\programme\xampp\htdocs\bla.php
/file.php würde also in c:\ gesucht werden.
 
Ok. Mit dem absoluten Pfad gehts!

Danke!

EDIT:

Haltet ihr
getcwd().'/controllers/' . 'router.php'

für eine gute Lösung? Oder wie würdet ihr das machen?
 
Zuletzt bearbeitet:
Sicher dass es für das Document-Root nicht eine Environment-Variable gibt bei PHP?
Ansonsten kannst du dir ja selbst eine Hilfsvariable definieren...
 
PHP:
if (DIRECTORY_SEPARATOR == '/') {
    $path = dirname(__FILE__);
} else {
    $path = str_replace('\\', '/', dirname(__FILE__));
}
define('DOCROOT', $path . "/");

das sollte helfen.
 
das sollte helfen.
Braucht man überhaupt eine Unterscheidung je nach Directory-Separator?

Und bzgl. folgendem:
dirname(__FILE__)


Ich glaube, dass ab PHP 5.3 auch __DIR__ geht, das heißt ab PHP 5.3 würde folgendes in einer Datei im Hauptpfad reichen oder?:

Code:
define('APPLICATION_PATH', __DIR__);
 
bei mir hat es probleme gemacht wenn man die scripte auf windows/unix ausgeführt hat, daher das oben genannte script welches auf unterschiedlichen umgebungen den richtigen pfad ermittelt.
 
Blackbenji schrieb:
genau dem ist nicht so, deswegen der workaround.
Doch, das stimmt so wie es dort steht. In allen Apache Configs unter Windows, wirst du bspw. eine Pfadangabe wie C:/das/ist/ein/test vorfinden und diese Pfadangabe funktioniert wunderbar.
Code:
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. Alle Rechte vorbehalten.

C:\Users\claw>cd "C:/Spieleserver/Source Dedicated Server/Left 4 Dead 2/left4dead2/left4dead2/addons"

C:\Spieleserver\Source Dedicated Server\Left 4 Dead 2\left4dead2\left4dead2\addons>
 
ich habe meinen kommentar zum falschen quote abgegeben ... mein kommentar galt der aussage von sadreas.
 
Zurück
Oben