actually, __halt_compiler did something, even in eval function, that things is set the constant __COMPILER_HALT_OFFSET__ to the right value
as all of you might know, PHP will change content of some magic constant like __FUNCTION__, __CLASS__, etc based on the situation. so do the __COMPILER_HALT_OFFSET__ constant, is a file specific constant, just like the __FILE__ constant, the content will be changed based on wich file the __halt_compiler() reside.
try this:
/**** whatever.php ****/
<?php
eval('echo __FILE__."(".__COMPILER_HALT_OFFSET__.")\n"; __halt_compiler();');
echo __FILE__."(".__COMPILER_HALT_OFFSET__.")\n"; __halt_compiler();
if (!isset($whatever))
{
$whatever = 'whatever';
include __FILE__;
}
__halt_compiler();whatever
__halt_compiler
(No version information available, might be only in CVS)
__halt_compiler — コンパイラの実行を中止する
説明
void __halt_compiler
( void
)
コンパイラの実行を中止します。 これは、インストール用ファイルのようなデータを PHP スクリプトに埋め込んでいる場合に便利です。
データの開始位置(バイト値)は、定数 __COMPILER_HALT_OFFSET__ で定義されています。 これはファイル内で __halt_compiler() が使用されている場合にのみ存在します。
返り値
値を返しません。
例
例1 __halt_compiler() の例
<?php
// このファイルをオープンします
$fp = fopen(__FILE__, 'r');
// データのある位置までファイルポインタを移動します
fseek($fp, __COMPILER_HALT_OFFSET__);
// それを出力します
var_dump(stream_get_contents($fp));
// ここでスクリプトの実行を終了します
__halt_compiler(); インストールデータ(例: tar, gz, PHP など..)
注意
注意: __halt_compiler() は、いちばん外側のスコープでのみ使用可能です。
__halt_compiler
gn_shallyNOSPAM at yahoo dot com
04-Jun-2008 05:56
04-Jun-2008 05:56
zsh
12-Oct-2007 02:11
12-Oct-2007 02:11
__halt_compiler() is a language construct and therefore cannot be used as a variable function.
Also, it cannot be used in eval() -- it won't throw a syntax error, but it won't do anything either.
