2011-02-07 4 views
10

とPHPのマジック定数__FILE__の仕事を得ることができ、私は奇妙な行動に出くわした:私は(UbuntuでEclipseの下)のXDebugといくつかのPHPファイルをデバッグされたとき、どのように私は最近、EclipseとPDT

print(__FILE__); 

の結果
"xdebug eval" 

GEE!

だから、このマジック定数はではなく、と思われます。

誰かが修正プログラムまたは実行可能な回避策を知っていますか?デバッガのデバッグ方法 (パスのハードコードはPITA!)

答えて

-1

print(__FILE__);にブレークポイントを作成し、使用可能な変数を分析します。

+1

マジック定数は変数ではなく、パーサによって展開されます。 – aexl

0

答えはありませんが、おそらく__DIR__をPHP 5.3で使用できます。
UPD。それはしばしばあなたが期待しているものを含んでいないことが分かりました。

7

出力は間違っていません。 __FILE__は、パーサー時に評価される特別な定数です。スクリプトのソースだったにも関わらず

// test.php 
<?php 
    "test.php"; 
?> 

// test.php 
<?php 
    __FILE__; 
?> 

これはパースした後、__FILE__そのような「定数」がないことを意味するPHPスクリプトがコンパイルされるとき、それは本当にこのようなものを読んでいましたまったく置き換えられているからです。

これは、あなたがDBGpのevalコマンドeval -- __FILE__を通じて、IDEで行う場合、それは任意のファイル名であなたに__FILE__を与えないことを意味します。代わりに、xdebug evalまたはそれ以降のバージョンのxdebug://debug-evalである現在のコンテキストのファイル名を使用します。また、出力

php -r 'eval("__FILE__;");' 

:本質的には

は、それがこれを行うのと同じです

Command line code(1) : eval()'d code 

Xdebugのは形式のこの種を探し、それが実際にできることxdebug://debug-evalにそれを変更evalされたコードにデバッグする。このスニペットを証明できるよう、PHPのソースコードで期待どおり

__FILE__作品は:

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

私はそれが古い質問です知っています。私はそれを変数に代入して解決しましたが、うまくいきました!

$file = __FILE__; 
include dirname($file) . '/../whateverfile.php'; 
関連する問題