Lately when i was debugging some PHP file with XDebug (under Eclipse on Ubuntu) i came across a strange behaviour:
print(__FILE__);
resulted in
"xdebug eval"
GEE!
So this magic constant seems not to work with this.
Anyone know a fix or a viable workaround? How to debug the debugger?
(Hardcoding a path is a PITA!)
The output you get is not incorrect. __FILE__
is a special constant that gets evaluated at parser time. When the PHP script gets compiled, it would really read something like this:
// test.php
<?php
"test.php";
?>
even though the script source was:
// test.php
<?php
__FILE__;
?>
This means that after parsing, there is no such "constant" __FILE__
at all, as it has already been replaced.
This means that if you do in an IDE, through DBGp's eval
command eval -- __FILE__
it can not give you the __FILE__
with any filename. Instead, it uses the filename for the current context which is xdebug eval
or in later versions, xdebug://debug-eval
.
In essence, it's the same as doing this:
php -r 'eval("__FILE__;");'
Which also outputs:
Command line code(1) : eval()'d code
Xdebug looks for this sort of format, and changes it to xdebug://debug-eval
so that it can actually debug into eval'ed code.
__FILE__
works as expected in PHP source code, as can be proven with this snippet:
<?php $far = __FILE__; // now evaluate $far in your IDE ?>
Not an answer, but you probably could use __DIR__
in php 5.3.
UPD. Found that it often contains not what you expect it to.
I know it is an old question. I solved by assigning it to a variable, then it works fine!
$file = __FILE__;
include dirname($file) . '/../whateverfile.php';
Create a breakpoint on line print(__FILE__);
and analyse which variables are available to you.