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 — Detiene la ejecución del compilador
Descripción
void __halt_compiler
( void
)
Detiene la ejecución del compilador. Esto puede ser útil para embeber datos en scripts PHP, como ocurre con los archivos de instalación.
La posición del byte al comienzo de los datos puede ser determinada por la constante __COMPILER_HALT_OFFSET__, la cual es definida únicamente si hay una función __halt_compiler() presente en el archivo.
Valores retornados
No value is returned.
Ejemplos
Example #1 Un ejemplo de __halt_compiler()
<?php
// abrir este archivo
$aa = fopen(__FILE__, 'r');
// acomodar el apuntador de archivo a los datos
fseek($aa, __COMPILER_HALT_OFFSET__);
// e imprimir
var_dump(stream_get_contents($aa));
// final de ejecución del script
__halt_compiler();los datos de instalación (p.ej. tar, gz, PHP, etc.)
Notes
Note: __halt_compiler() solo puede usarse desde el contexto más externo.
__halt_compiler
gn_shallyNOSPAM at yahoo dot com
04-Jun-2008 04:56
04-Jun-2008 04:56
zsh
12-Oct-2007 01:11
12-Oct-2007 01: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.
