downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

highlight_file> <get_browser
Last updated: Fri, 14 Aug 2009

view this page in

__halt_compiler

(PHP 5)

__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 d'installation (eg. tar, gz, PHP, etc..)

Notes

Note: __halt_compiler() ne peut être utilisé que depuis une portée extérieure.



highlight_file> <get_browser
Last updated: Fri, 14 Aug 2009
 
add a note add a note User Contributed Notes
__halt_compiler
Ultimater at gmail dot com
14-May-2009 01:36
Another possible usage, in addition to binary data and installers,
is using it to separate model, view and controller logic from one another:

<?php
class viewhelper{function render(){
eval(
file_get_contents(__FILE__,null,null,__COMPILER_HALT_OFFSET__));
}}

//database logic goes here
$row=array(
'loggedin'=>true,
'modcp'=>true,
'admincp'=>false,
'username'=>'Ultimater',
'userid'=>1234
);
//database logic goes here

//controller logic goes here
$view=new viewhelper;
$view->title="Test -> Ultimater's MVC example";
$view->base="http://".$_SERVER['HTTP_HOST'];
$view->username=$row['username'];
$view->userid=$row['userid'];
$view->authbar->loggedin=$row['loggedin'];
$view->authbar->modcp=$row['modcp'];
$view->authbar->admincp=$row['admincp'];
$view->render();
//controller logic goes here

__halt_compiler();?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><?=htmlentities($this->title)?></title>
<style type="text/css">
a{color:#3333ff;text-decoration:none;}
a:hover{color:#0380fc;}
</style>
</head>
<body>
<?php
if($this->authbar->loggedin){
?>
<table><tr>
<td>Hello <a href="<?=$this->base?>/showuser.php?id=<?=$this->userid?>
"><?=htmlentities($this->username)?></a></td><td>[</td>
<td><a href="<?=$this->base?>/logout.php">Log Out</a></td>
<th><a href="<?=$this->base?>/usercp.php">UserCP</a></th>
<? if($this->authbar->modcp){ ?>
<td>&middot;</td><th><a href="<?=$this->base?>/modcp.php">ModCP</a></th>
<? } ?>
<?
if($this->authbar->admincp){ ?>
<td>&middot;</td><th><a href="<?=$this->base?>/admincp.php">AdminCP</a></th>
<? } ?>
<td>]</td>
</tr></table>
<?php
}else{
?>
<table><tr><td>Hello Guest</td><td>[</td>
<td><a href="<?=$this->base?>/login.php">Log In</a></td>
<th><a href="<?=$this->base?>/register.php">Register</a></th>
<td>]</td></tr></table>
<? } ?>
</body>
</html>
gn_shallyNOSPAM at yahoo dot com
04-Jun-2008 02:56
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
zsh
12-Oct-2007 11: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.

highlight_file> <get_browser
Last updated: Fri, 14 Aug 2009
 
 
show source | credits | sitemap | contact | advertising | mirror sites