最近的PHP魔术常量__FILE__工作时,我被调试用的XDebug(Eclipse的下Ubuntu的)一些PHP文件,我遇到了一个奇怪的现象:我怎样才能Eclipse和PDT
print(__FILE__);
导致
"xdebug eval"
GEE!
所以这个神奇的常数似乎不是与此合作。
任何人都知道一个修复或可行的解决方法?如何调试调试器? (硬编码路径是PITA!)
最近的PHP魔术常量__FILE__工作时,我被调试用的XDebug(Eclipse的下Ubuntu的)一些PHP文件,我遇到了一个奇怪的现象:我怎样才能Eclipse和PDT
print(__FILE__);
导致
"xdebug eval"
GEE!
所以这个神奇的常数似乎不是与此合作。
任何人都知道一个修复或可行的解决方法?如何调试调试器? (硬编码路径是PITA!)
在行print(__FILE__);
上创建断点并分析哪些变量可供您使用。
不是答案,但你可能可以在php 5.3中使用__DIR__
。
UPD。发现它通常不包含你期望的内容。
你得到的输出没有错误。 __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 ?>
我知道这是一个老问题。我解决了将它分配给一个变量,然后它工作正常!
$file = __FILE__;
include dirname($file) . '/../whateverfile.php';
魔术常量不是变量,解析器展开它们。 – aexl 2011-02-08 09:19:27