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 — Stoppe l'exécution du compilateur
Description
void __halt_compiler
( void
)
Stoppe l'exécution du compilateur. Ceci peut être très utile pour embarquer des données dans des scripts PHP, comme des fichiers d'installation.
L'octet de la position du début des données peut être déterminé par la constante __COMPILER_HALT_OFFSET__ qui n'est définie que s'il y a une fonction __halt_compiler() présente dans le fichier.
Valeurs de retour
Aucune valeur n'est retournée.
Exemples
Exemple #1 Exemple avec __halt_compiler()
<?php
// Ouverture d'un fichier
$fp = fopen(__FILE__, 'r');
// Déplace le pointeur de fichier vers les données
fseek($fp, __COMPILER_HALT_OFFSET__);
// Puis, on l'affiche
var_dump(stream_get_contents($fp));
// La fin de l'exécution du script
__halt_compiler();les données dinstallation (eg. tar, gz, PHP, etc..)
Notes
Note: __halt_compiler() ne peut être utilisé que depuis une portée extérieure.
__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.
