В последнее время, когда я отлаживал некоторый 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__);
и проанализировать, какие переменные доступны вам.