最近,当我用XDebug调试一些PHP文件时(在Ubuntu上的Eclipse下),我遇到了一个奇怪的行为:
print(__FILE__);
结果
"xdebug eval"
GEE!
所以这个神奇的常数似乎不适用于此.
任何人都知道修复或可行的解决方法?如何调试调试器?
(硬编码路径是PITA!)
解决方法:
你得到的输出不正确. __FILE__是一个在解析器时间得到的特殊常量.当PHP脚本被编译时,它真的会读到这样的东西:
// test.php
<?php
"test.php";
?>
即使脚本源是:
// test.php
<?php
__FILE__;
?>
这意味着在解析之后,根本没有这样的“常量”__FILE__,因为它已被替换.
这意味着如果您在IDE中执行,通过DBGp的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代码.
__FILE__在PHP源代码中按预期工作,可以使用此代码段证明:
<?php $far = __FILE__; // now evaluate $far in your IDE ?>