Dieser Artikel bietet Ihnen eine detaillierte Erklärung (Bild) des PHP-Lebenszyklus. Ich hoffe, dass er für Freunde in Not hilfreich ist.
Der erste Prozess ist die Modulinitialisierungsphase (MINIT), die während des gesamten SAPI-Lebenszyklus auftritt (z. B. dem gesamten Lebenszyklus nach dem Start von Apache oder dem gesamten Ausführungsprozess). des Kommandozeilenprogramms), wird dieser Vorgang nur einmal durchgeführt. Der zweite Prozess ist die Modulaktivierungsphase (RINIT), die in der Anforderungsphase stattfindet. Wenn beispielsweise eine Seite über eine URL angefordert wird, wird die Modulaktivierung vor jeder Anforderung durchgeführt (RINIT-Anforderung beginnt)
Nachdem die Anfrage eintrifft, initialisiert PHP die grundlegende Umgebung zum Ausführen des Skripts, z. B. das Erstellen einer Ausführungsumgebung, einschließlich einer Symboltabelle, die die Variablennamen und Werteinhalte während der Ausführung von PHP speichert, sowie einer Symboltabelle mit allen aktuellen Funktionen, Klassen und anderen Informationen. Dann ruft PHP die RINIT-Funktion aller Module auf. Zu diesem Zeitpunkt kann jedes Modul auch einige verwandte Vorgänge ausführen
Im Allgemeinen wird das Skript bis zum Ende oder durch Aufrufen des Exits ausgeführt. ) oder die()-Funktion, PHP wird alle in die Endphase eintreten. Entsprechend der Startphase ist auch die Endphase in zwei Phasen unterteilt: Eine besteht darin, das Modul nach Abschluss der Anforderung zu deaktivieren (RSHUTDOWN, entsprechend RINIT), und die andere darin, das Modul zu schließen, wenn der SAPI-Lebenszyklus endet ( der Webserver wird beendet oder das Befehlszeilenskript wird ausgeführt und beendet). 🎜>
Startup
Vor dem Aufruf der Modulinitialisierung jedes Moduls findet ein Initialisierungsprozess statt, der Folgendes umfasst:
Eine Reihe globaler Variablen initialisieren
Eine Reihe von Konstanten initialisieren
Zend-Engine und Kernkomponenten initialisieren
Die Initialisierungsvorgänge hier umfassen die Initialisierung der Speicherverwaltung und die Initialisierung globaler Funktionszeiger (wie zend_printf usw.), lexikalische Analyse und Syntaxanalyse von PHP-Quelldateien. Weisen Sie den vom Zwischencode ausgeführten Funktionszeiger zu, initialisieren Sie mehrere HashTables (z. B. Funktionstabellen, Konstantentabellen usw.) und bereiten Sie sich auf INI vor Dateianalyse, Vorbereitung für die PHP-Quelldateianalyse, Registrierung integrierter Funktionen (z. B. strlen, define usw.), Registrierung von Standardkonstanten (z. B. E_ALL, TRUE, NULL usw.), Registrierung globaler GLOBALS-Variablen usw.
php.ini analysieren
Initialisierung der globalen Betriebsfunktion
Statisch erstellte Module initialisieren und Gemeinsam genutzte Module (MINIT)
, um diese Module in der Liste der registrierten Module (module_registry) zu registrieren. Wenn das registrierte Modul bereits registriert wurde, meldet PHP den Fehler „Modul XXX bereits geladen“. 1. Registrieren Sie die in jedem Modul enthaltenen Funktionen in der Funktionstabelle (CG(function_table)). Wenn die Funktion nicht hinzugefügt werden kann, wird die Meldung „Funktionen konnten nicht registriert werden, Laden nicht möglich“ gemeldet.
Nachdem alle Module registriert sind, führt PHP sofort den Modulinitialisierungsvorgang durch (zend_startup_modules). Der gesamte Prozess besteht darin, jedes Modul der Reihe nach zu durchlaufen und die Modulinitialisierungsfunktion jedes Moduls aufzurufen. Dies ist im zuvor in diesem Abschnitt erwähnten Makro PHP_MINIT_FUNCTION enthalten.
PHP Zusätzlich zu einigen der oben genannten Variablen verfügt die Ausführungsumgebung auch über Fehlerbehandlung, Ausnahmebehandlung usw., die alle hier initialisiert werden. Die über php.ini konfigurierten zend_extensions werden ebenfalls durchlaufen und die Aktivierungsfunktion wird hier aufgerufen.
SAPI aktivieren
Umgebungsinitialisierung
Die Umgebungsinitialisierung bezieht sich hier auf die Initialisierung einiger Umgebungsvariablen, die im Benutzerbereich verwendet werden müssen. Die Umgebung umfasst hier die Serverumgebung, die Anforderungsdatenumgebung usw. Die tatsächlichen Variablen, die wir verwenden, sind P OST, _GET, COOKIE, _SERVER, ENV, _FILES.
Initialisierung der Modulanforderung
Ausführen
DEAKTIVIERUNG
Der Prozess des PHP-Schließens einer Anfrage besteht aus mehreren Schließvorgängen. Dieser Satz ist in der Funktion php_request_shutdown vorhanden. Diese Sammlung umfasst Folgendes:
Rufen Sie alle über register_shutdown_function() registrierten Funktionen auf. Diese beim Herunterfahren aufgerufenen Funktionen wurden im Benutzerbereich hinzugefügt. Als einfaches Beispiel können wir eine einheitliche Funktion aufrufen, wenn ein Skriptfehler auftritt, um dem Benutzer eine benutzerfreundlichere Seite zu bieten. Dies ähnelt in gewisser Weise der 404-Seite im Web.
Führen Sie alle verfügbaren __destruct-Funktionen aus. Der Destruktor umfasst hier den Destruktor aller Objekte im Objektpool (EG (objects_store)) und den Destruktor jedes Elements in EG (symbol_table).
Alle Ausgaben löschen. Dies ist auch ein Prozess der Ausgabe einer Zeichenfolge, aber diese Zeichenfolge kann bestimmten Spezifikationen entsprechen.
Durchläuft die Anforderung zum Herunterfahren des Moduls. Dies ist, was wir im Bild sehen 🎜>Zerstören Sie die Variablen der globalen Variablentabelle (PG(http_globals)).
Schließen Sie den lexikalischen Analysator, den Syntaxanalysator und den Zwischencode-Executor über die Funktion „post-RSHUTDOWN“. .
Schließen Sie den Inhalt von SG (sapi_headers), SG (request_info) usw.
Schließen Sie den Stream-Filter
Setzen Sie die maximale Ausführungszeit zurück 🎜>
Ende
flush
sapi_flush löscht den letzten Inhalt. Dies entspricht der Flush-Funktion im CLI-Modus. zend_shutdown fährt die Zend-Engine herunter.Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung des PHP-Lebenszyklus (Bild). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!