如何让PHP魔术常量__FILE__与Eclipse和PDT一起使用

时间:2011-02-07 17:55:00

标签: php eclipse xdebug

最近,当我用XDebug调试一些PHP文件时(在Ubuntu上的Eclipse下)我遇到了一个奇怪的行为:

print(__FILE__);

导致

"xdebug eval"

GEE!

所以这个神奇常数似乎来处理它。

任何人都知道修复或可行的解决方法吗?如何调试调试器? (硬编码路径是PITA!)

5 个答案:

答案 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__);行创建一个断点,并分析哪些变量可供您使用。