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 — Beendet die Kompilerausführung
Beschreibung
void __halt_compiler
( void
)
Beendet die Kompilerausführung. Dies kann sinvoll sein wenn Data in PHP Skripte eingebettet ist, wie z.B. in Installationsdateien.
Die Byteposition an der die Daten beginnen kann über die Konstante __COMPILER_HALT_OFFSET__ ermittelt werden die nur definiert ist wenn die Funlktion __halt_compiler() in der Datei benutzt wird. file.
Rückgabewerte
Es wird kein Wert zurückgegeben.
Beispiele
Beispiel #1 Ein __halt_compiler() Beispiel
<?php
// Datei öffnen
$fp = fopen(__FILE__, 'r');
// Auf den Anfang der Daten positionieren
fseek($fp, __COMPILER_HALT_OFFSET__);
// und diese ausgeben
var_dump(stream_get_contents($fp));
// hier Kompilation beendenn
__halt_compiler();ab hier die eigentlichen Daten (z.B.. tar, gz, PHP, etc.)
Anmerkungen
Hinweis: __halt_compiler() kann nur auf der höchsten Ausführungsebene und nicht innerhalb anderer Funktionen oder Methoden benutzt werden.
__halt_compiler
gn_shallyNOSPAM at yahoo dot com
03-Jun-2008 07:56
03-Jun-2008 07:56
zsh
12-Oct-2007 04:11
12-Oct-2007 04: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.
