2012-12-07 14 views
13

Stałe nie działają w sytuacji dowiązania symbolicznego. Jakie jest obejście tego problemu?PHP __DIR__ lub __FILE__ dowiązane symbolicznie

Na przykład:

Mam plik:

/home/me/modules/myfile.php 

Jest dowiązane do:

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

od w /home/me/modules/myfile.php muszę dołączyć plik, który znajduje się w /var/www/project

EDYTOWANIE

Do sugestii używania realpath() - niestety to nie działa.

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

zwracają dokładnie tego samego filePath

+3

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

+0

nieparzysty , realpath() zwraca wartość false, a plik na pewno istnieje –

+0

'realpath()' of _what_ zwraca false? 'realpath (__ DIR __)' –

Odpowiedz

0

Można użyć funkcji realpath() rozszerzyć dowiązania symboliczne. Jednak moim zaleceniem byłoby nie używać takich dowiązań symbolicznych. (Dodaj /var/www/project/app, lub odpowiedni katalog nadrzędny, do swojej ścieżki dołączania PHP).

+0

Obawiam się, że realpath nie daje mi dowiązania symbolicznego: –

+0

["readlink()"] (http://php.net/readlink) może? Jeśli nie, to jestem zagubiony. – duskwuff

+1

@duskwuff patrz http://stackoverflow.com/questions/13771021/php-dir-or-file-symlinked#comment18933995_13771021 OP chce efektu przeciwnego do realpath i readlink –

2

Czy próbowałeś następujących rzeczy?

dirname($_SERVER['SCRIPT_FILENAME'])

W twoim przypadku to powróci: /var/www/project/app

+0

To powinna być zaakceptowana odpowiedź. –

+0

Działa to tylko przy założeniu, że PHP działa przez serwer WWW, taki jak Apache, a nie w linii poleceń. – Greg

+0

To nieprawda. Działa to niezależnie od tego, czy korzystasz z serwera WWW konsoli. W dalszym ciągu przechodzi on przez serwer/SAPI - pod względem konsolowym przejdzie na przykład przez fpm-cgi, a nie przez apache-cgi. Przetestowałem to i '$ _SERVER ['SCRIPT_FILENAME']' zdecydowanie działa. –

Powiązane problemy