Heim >Backend-Entwicklung >PHP-Tutorial >Einige Zusammenfassungen von __halt_compiler

Einige Zusammenfassungen von __halt_compiler

WBOY
WBOYOriginal
2016-08-08 09:22:331541Durchsuche
  • __halt_compiler() ist, wie der Name schon sagt, eine Funktion, die den Compiler am Kompilieren hindert. Wenn der Compiler diesen Punkt ausführt, analysiert er die folgenden Teile nicht mehr. Es ist zu beachten, dass diese Funktion direkt in der äußersten Ebene der PHP-Datei verwendet werden muss und nicht innerhalb einer Funktion verwendet werden kann.

Laut der Einleitung im PHP-Handbuch wird diese Funktion häufig zum Einbetten von Daten in Skripten verwendet, ähnlich wie bei Installationsdateien. Das heißt, nach __halt_compiler(); fügen Sie einige Dateien ein, die nicht kompiliert werden müssen, wie z. B. binäres Rauschen (Unordnung), komprimierte Dateien und andere Dateitypen. Beispielsweise wird der folgende Code verwendet:

// open this file
$fp = fopen(__FILE__, 'r');
// seek file pointer to data
fseek($fp, __COMPILER_HALT_OFFSET__);
// and output it
var_dump(stream_get_contents($fp));
// the end of the script execution
__halt_compiler(); the installation data (eg. tar, gz, PHP, etc.)
TIPP: Die Konstante __COMPILER_HALT_OFFSET__ wird verwendet Erhalten Sie das Datenwort. Der Anfang des Abschnitts. Zur Verwendung ist __halt_compiler() erforderlich.
  • Als nächstes sprechen wir über ein konkretes Beispiel einer PHP-Installationsdatei:

Bevor __halt_compiler() in php5.1 eingeführt wurde Mit gzdeflat() komprimierte Dateien enthalten häufig spezielle ASCII-Codes, die vom PHP-Interpreter (Parser) nicht gelesen werden können, was zu Fehlern führt. Um das Auftreten von Fehlern zu verhindern, wird base64_encode() zum Codieren der von gzdeflate() generierten Daten verwendet, wodurch sich die Dateigröße um ca. 33 % erhöht. Das ist eine Verschwendung von Speicher.

$packed = base64_encode(gzdeflate('the old package'));
//unpacked
$unpacked = base64_decode(gzinflate($packed));
Mit __halt_compiler() können wir base64_encode() nicht mehr zum Codieren verwenden, sondern die Daten direkt nach __halt_compiler() einfügen, sodass sie nicht kompiliert werden und ein Fehler auftritt geschehen.
// 打开脚本自身文件
$fp = fopen(__FILE__, 'rb');
// 找到数据在文件中的指针
//__COMPILER_HALT_OFFSET__ 将会返回
//__halt_compiler();之后的指针
fseek($fp, __COMPILER_HALT_OFFSET__);
// 输出文件
$unpacked = gzinflate(stream_get_contents($fp));
__halt_compiler();
//now here... all the binary gzdeflate already items!!!

Das Obige stellt einige Zusammenfassungen von __halt_compiler vor, einschließlich Aspekten des Inhalts. Ich hoffe, dass es für Freunde hilfreich sein wird, die sich für PHP-Tutorials interessieren.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:SitzungsprinzipNächster Artikel:Sitzungsprinzip