Как я могу получить постоянную магию PHP __FILE__ работать с Eclipse и PDT

В последнее время, когда я отлаживал некоторый PHP-файл с XDebug (под Eclipse на Ubuntu), я столкнулся с странным поведением:

print(__FILE__); 

привело к

 "xdebug eval" 

GEE!

Так что эта волшебная константа, похоже, не работает с этим.

Кто-нибудь знает исправление или жизнеспособное обходное решение? Как отлаживать отладчик? (Hardcoding путь – это PITA!)

Полученный результат не является неправильным. __FILE__ – специальная константа, которая оценивается во время анализатора. Когда скрипт PHP будет скомпилирован, он действительно прочитает что-то вроде этого:

 // test.php <?php "test.php"; ?> 

хотя источник скрипта был:

 // test.php <?php __FILE__; ?> 

Это означает, что после разбора нет такого «постоянного» __FILE__ вообще, поскольку он уже заменен.

Это означает, что если вы делаете это в среде IDE, то через eval команду eval -- __FILE__ она не может дать вам __FILE__ с любым именем файла. Вместо этого он использует имя файла для текущего контекста, который является xdebug eval или в более поздних версиях, xdebug://debug-eval .

По сути, это то же самое, что делать:

 php -r 'eval("__FILE__;");' 

Что также выводит:

 Command line code(1) : eval()'d code 

Xdebug ищет такой формат и меняет его на xdebug://debug-eval чтобы он мог фактически отлаживать код eval'ed.

__FILE__ работает как ожидалось в исходном коде PHP, как это можно доказать с помощью этого фрагмента:

 <?php $far = __FILE__; // now evaluate $far in your IDE ?> 

Не ответ, но вы, вероятно, можете использовать __DIR__ в php 5.3.
UPD. Обнаружил, что он часто содержит не то, что вы ожидаете.

Я знаю, что это старый вопрос. Я решил, назначив его переменной, тогда он отлично работает!

 $file = __FILE__; include dirname($file) . '/../whateverfile.php'; 

Создать print(__FILE__); останова при print(__FILE__); строки print(__FILE__); и проанализировать, какие переменные доступны вам.