In der PHP -Entwicklung ist __Halt_Compiler () eine Sprachstruktur, die in einigen Szenarien weniger erwähnt, aber sehr nützlich ist. Es wird verwendet, um dem PHP -Interpreter zu sagen, dass er "hier nicht mehr analysiert" und so alles überspringen soll, was im Skript folgt. Dieser Mechanismus kann verwendet werden, um Binär- oder Textdaten zu verbergen oder anzuhängen, die nicht interpretiert und ausgeführt werden, z. B. das Erstellen von Skripten, Verpackungstools oder benutzerdefinierte Dateiformate. In diesem Artikel wird ausführlich die Rolle von __Halt_compiler () und wie man sie richtig verwendet, um eine nicht verwandte Codeausführung zu vermeiden.
__HALT_COMPILER () ist eine Sprachstruktur (keine Funktion), und wenn der PHP -Interpreter ausgeführt wird, hört er sofort auf, alle nachfolgenden Code in der Datei zu kompilieren. Auf diese Weise können Sie alle Nicht-PHP-Daten am Ende einer PHP-Datei speichern, ohne die normale Codeausführung zu beeinträchtigen.
<?php
echo "Hello, World!";
__halt_compiler();
Dies wird nicht seinPHPDer Inhalt der Analyse。
Im obigen Code nur "Hallo, Welt!" wird ausgegeben, und der Text nach __Halt_compiler () wird nicht ausgeführt, analysiert oder in der Ausgabe enthalten.
Entwickler können __HALT_COMPILER () verwenden, um Self-Extract-Skripte zu erstellen oder Ressourcen einzubetten. Wenn Sie beispielsweise Konfigurationsdateien, verschlüsselte Daten usw. am Ende der PHP -Datei einbetten möchten, können Sie sie so verarbeiten:
<?php
$dataOffset = __COMPILER_HALT_OFFSET__;
$data = file_get_contents(__FILE__, false, null, $dataOffset);
// Hier können Sie$dataWeitere Verarbeitung machen,Wenn Unkomfort、Analyse usw.
__halt_compiler();
// Binärdaten beginnen
In einigen automatisch generierten Skripten, Debugging -Informationen, Pfaden, Token usw., wenn sie nicht mit __Halt_Compiler () geschützt werden, kann es versehentlich ausgeführt oder durchgesickert werden.
Obwohl __Halt_compiler () selbst selbst verhindern kann, dass der nachfolgende Code ausgeführt wird, sollten wir in der Praxis auch auf die folgenden Punkte achten:
Wenn eine Datei mit __Halt_Compiler () über andere Dateien über include oder Forderung verwiesen wird, beendet PHP die Analyse des verbleibenden Codes bei der Ausführung __Halt_Compiler () . Um dies zu verhindern, wird empfohlen, die Datei als eigenständige Eingabedatei festzulegen oder Kommentare zur obersten Erinnerung hinzuzufügen:
// Geben Sie diese Datei nicht an,Sollte über den eigenständigen Betrieb zugegriffen werden
Es wird empfohlen, immer die Konstante __Compiler_Halt_Offset zu verwenden, um die Suffixdaten zu lesen, um hartcodierte Offsets oder Pfade zu vermeiden. Zum Beispiel:
$file = __FILE__;
$data = file_get_contents($file, false, null, __COMPILER_HALT_OFFSET__);
Diese Methode ist robuster und förderlicher für die Bereitstellung in verschiedenen Umgebungen.
Wenn Sie die Daten auf der Rückseite einer PHP -Datei speichern, stellen Sie sicher, dass die Datei vom Webserver nicht direkt öffentlich zugegriffen wird. Beispielsweise können Sie .htaccess -Dateien verwenden, um den Zugriff einzuschränken:
<FilesMatch "secret\.php$">
Deny from all
</FilesMatch>
Legen Sie die Datei alternativ in einem nicht öffentlichen Verzeichnis und steuern Sie den Zugriff über das Programm.
Hier ist ein einfaches Beispiel, das zeigt, wie ein selbstextrahiertes PHP-Skript erstellt wird, das Konfigurationsdaten mit __HALT_COMPILER () enthält:
<?php
$configData = file_get_contents(__FILE__, false, null, __COMPILER_HALT_OFFSET__);
$config = unserialize($configData);
echo "Datenbankhost: " . $config['db_host'];
__halt_compiler();
a:1:{s:7:"db_host";s:9:"gitbox.net";}
Im obigen Code fügen wir die Konfigurationserialisierung bis zum Ende der PHP -Datei an und erhalten die Konfigurationsdaten über Laufzeitdeserialisierung. Dies ist sicher und flexibel.
Obwohl __Halt_compiler () keine häufig verwendete Funktion in der täglichen Entwicklung ist, ist es in einigen erweiterten Verwendungen sehr leistungsfähig, insbesondere für Szenarien wie das Erstellen von Skripten, die Ressourcen und das Anpassen von PHP -Ausführungsverhalten geeignet. Das Beherrschen der Prinzipien und das gute Gebrauch von ihnen kann nicht nur die Codesicherheit verbessern, sondern auch die Grenzen der PHP -Nutzung erweitern.