Вывод, который вы получаете, не является неправильным. __FILE__
- это специальная константа, которая вычисляется во время синтаксического анализа. Когда PHP-скрипт компилируется, он действительно читает что-то вроде этого:
// test.php
<?php
"test.php";
?>
несмотря на то, что источником скрипта было:
// test.php
<?php
__FILE__;
?>
Это означает, что после синтаксического анализа такой "постоянной" __FILE__
вообще не существует, поскольку она уже была заменена.
Это означает, что если вы делаете это в IDE, то через eval
команду DBGp 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 ?>