2012-12-07 9 views
13

Verwenden von __DIR__ und __FILE__ Konstanten funktionieren nicht in einer symbolischen Situation. Was ist die Problemumgehung dafür?PHP __DIR__ oder __FILE__ symlinked

Zum Beispiel:

Ich habe eine Datei:

/home/me/modules/myfile.php 

Es ist Symlink an:

/var/www/project/app/myfile.php 

von in /home/me/modules/myfile.php Ich brauche eine Datei enthalten, die in /var/www/project

befindet

BEARBEITEN

Zu den Vorschlägen der Verwendung von realpath() - leider funktioniert das nicht.

var_dump(__DIR__); 
var_dump(realpath(__DIR__)); 

beide Rückkehr genau der gleichen Filepath

+3

[ 'realpath()'] (http://us3.php.net/manual/en/function.realpath.php) –

+0

ungerade , realpath() gibt false zurück und die Datei existiert definitiv –

+0

'realpath()' von _what_ gibt false zurück? 'realpath (__ DIR __)' –

Antwort

0

Sie die realpath() Funktion symbolische Links erweitern verwenden können. Meine Empfehlung wäre jedoch, keine solchen Symlinks zu verwenden. (Fügen Sie stattdessen /var/www/project/app oder ein entsprechendes übergeordnetes Verzeichnis zu Ihrem PHP-Include-Pfad hinzu.)

+0

Ich fürchte, Realpath gibt mir die symlinked location entweder –

+0

['readlink()'] (http://php.net/readlink) vielleicht? Wenn nicht, bin ich ratlos. – duskwuff

+1

@duskwuff siehe http://stackoverflow.com/questions/13771021/php-dir-or-file-symlinked#comment18933995_13771021 OP will entgegengesetzte Wirkung zu realpath und readlink –

2

Haben Sie Folgendes versucht?

dirname($_SERVER['SCRIPT_FILENAME'])

In Ihrem Fall wird dies zurück: /var/www/project/app

+0

Dies sollte die akzeptierte Antwort –

+0

sein Das funktioniert nur unter der Annahme, dass PHP über einen Webserver wie Apache läuft, nicht auf der Kommandozeile. – Greg

+0

Nicht wahr. Dies funktioniert unabhängig davon, ob Sie einen Webserver der Konsole verwenden. Es geht immer noch durch einen Server/SAPI - in Bezug auf eine Konsole, wird es zum Beispiel durch fpm-CGI statt Apache-CGI gehen. Ich habe das getestet und '$ _SERVER ['SCRIPT_FILENAME']' funktioniert definitiv. –

Verwandte Themen