Heim > Backend-Entwicklung > PHP-Tutorial > Detaillierte Erklärung des PHP-Lebenszyklus (Bild)

Detaillierte Erklärung des PHP-Lebenszyklus (Bild)

不言
Freigeben: 2023-04-04 10:38:02
nach vorne
4079 Leute haben es durchsucht

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). 🎜>

  • Start – Antrag zum Starten – Antrag zum Schließen – Ende

  • Startup
    Detaillierte Erklärung des PHP-Lebenszyklus (Bild)
    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.

  • Nach integrierten Modulen und Zusatzmodulen besteht der nächste Schritt darin, Erweiterungen zu registrieren, die über gemeinsam genutzte Objekte (z. B. DLLs) und php.ini-Dateien flexibel konfiguriert werden.
  • 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.

Nach der Verarbeitung des dateibezogenen Inhalts ruft PHP php_request_startup auf, um den Anforderungsinitialisierungsvorgang durchzuführen. Der Anforderungsinitialisierungsvorgang erledigt neben dem Aufruf der Anforderungsinitialisierungsfunktion jedes in der Abbildung gezeigten Moduls auch viele andere Aufgaben. Der Hauptinhalt lautet wie folgt:

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

Endlich ist es Zeit zu beenden

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!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage