2011-02-07 47 views
10

最近的PHP魔术常量__FILE__工作时,我被调试用的XDebug(Eclipse的下Ubuntu的)一些PHP文件,我遇到了一个奇怪的现象:我怎样才能Eclipse和PDT

print(__FILE__); 

导致

"xdebug eval" 

GEE!

所以这个神奇的常数似乎不是与此合作。

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

回答

-1

在行print(__FILE__);上创建断点并分析哪些变量可供您使用。

+1

魔术常量不是变量,解析器展开它们。 – aexl 2011-02-08 09:19:27

0

不是答案,但你可能可以在php 5.3中使用__DIR__
UPD。发现它通常不包含你期望的内容。

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'ed代码。

__FILE__作品预计在PHP源代码,可以在这个片段中得到证实:

<?php $far = __FILE__; // now evaluate $far in your IDE ?> 
0

我知道这是一个老问题。我解决了将它分配给一个变量,然后它工作正常!

$file = __FILE__; 
include dirname($file) . '/../whateverfile.php';