最近,当我用XDebug调试一些PHP文件时(在Ubuntu上的Eclipse下)我遇到了一个奇怪的行为:
print(__FILE__);
导致
"xdebug eval"
GEE!
所以这个神奇常数似乎不来处理它。
任何人都知道修复或可行的解决方法吗?如何调试调试器? (硬编码路径是PITA!)
答案 0 :(得分:7)
您获得的输出不正确。 __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 ?>
答案 1 :(得分:3)
尽管这是一个非常古老的话题,但仍然是实际的。这就是为什么我还要从此处的类似主题中复制粘贴我的答案。
这是XDEBUG问题,可以通过将XDEBUG版本降级到2.6.1来解决(如果使用非常老的PHP,则可以进行升级)。 我无意中遇到了这个问题,无法找到答案。重新安装服务器,PHP,PHPStorm,不同版本的XDEBUG并没有帮助。 对于MacOS,可以使用
pecl install xdebug-2.6.1
如果您已经有较新的版本,则可以使用命令
pecl uninstall xdebug
经过几个小时的调查,this article中的答案对我有很大帮助。
答案 2 :(得分:0)
不是答案,但您可能可以在php 5.3中使用__DIR__
UPD。发现它通常不包含您期望的内容。
答案 3 :(得分:0)
我知道这是一个老问题。我通过将其分配给变量来解决,然后它工作正常!
$file = __FILE__;
include dirname($file) . '/../whateverfile.php';
答案 4 :(得分:-1)
在第print(__FILE__);
行创建一个断点,并分析哪些变量可供您使用。