Heim Backend-Entwicklung PHP-Tutorial Wie PHP funktioniert

Wie PHP funktioniert

Jul 29, 2016 am 09:16 AM
function http php zend

In diesem Artikel untersuchen wir, wie PHP-Code interpretiert und ausgeführt wird und den Lebenszyklus der Ausführung von PHP-Skripten.

Übersicht

Start des PHP-Dienstes. Streng genommen müssen PHP-bezogene Prozesse nicht manuell gestartet werden. Sie werden ausgeführt, wenn Apache gestartet wird. Wenn Sie den PHP-Dienst neu starten müssen, können Sie den PHP-Dienst natürlich auch manuell neu starten. Nachdem Sie beispielsweise den Code in einer formalen Umgebung mit aktiviertem Opcode aktualisiert haben, müssen Sie PHP neu starten, um den PHP-Code neu zu kompilieren.

Aus makroökonomischer Sicht besteht die Implementierung des PHP-Kernels darin, Eingabedaten zu empfangen, die entsprechende Verarbeitung intern durchzuführen und dann die Ergebnisse auszugeben. Für den PHP-Kernel handelt es sich bei dem von uns geschriebenen PHP-Code um die vom Kernel empfangenen Eingabedaten. Nach dem Empfang der Codedaten führt der PHP-Kernel eine Codeanalyse und Operationsausführung für den von uns geschriebenen Code durch und gibt schließlich das entsprechende Operationsergebnis zurück.

Im Gegensatz zum üblichen C-Sprachcode müssen Sie zum Ausführen von PHP-Code jedoch zunächst den PHP-Code in Maschinensprache „übersetzen“, um die entsprechende Funktion auszuführen. Um den Schritt „Übersetzung“ durchzuführen, muss der PHP-Kernel folgende Schritte ausführen: lexikalische Analyse, Syntaxanalyse und andere Schritte. Abschließend wird es zur sequentiellen Ausführung an die Zend Engine des PHP-Kernels übergeben.

Lexikalische Analyse

PHP-Code in „Einheiten“ (TOKEN) aufteilen

Syntaktische Analyse
„Einheiten“ in ausführbare Zend Engine-Operationen konvertieren

Zend Engine-Ausführung
Führen Sie die durch Syntaxanalyse erhaltenen Vorgänge nacheinander aus

Alle PHP-Programme (CGI/CLI) starten mit SAPI (Server Application Programming Interface). Die Schnittstelle wird gestartet. SAPI bezeichnet die Programmierschnittstelle für bestimmte PHP-Anwendungen. Zum Beispiel mod_php von Apache.

Nachdem PHP mit der Ausführung begonnen hat, durchläuft es zwei Hauptphasen: die Startphase vor der Verarbeitung der Anfrage und die Endphase nach der Anfrage.

Startphase

Die gesamte Startphase von PHP durchläuft zwei Phasen: Modulinitialisierung und Modulaktivierung.

MINIT

ist die Modulinitialisierungsphase, die während des gesamten Lebenszyklus nach dem Start von Apache/Nginx oder während der gesamten Ausführung des Befehlszeilenprogramms auftritt. Diese Phase wird nur einmal durchgeführt

RINIT
Die Modulaktivierung erfolgt während der Anforderungsphase. Führen Sie einige Initialisierungsarbeiten durch: z. B. das Registrieren von Konstanten, das Definieren der vom Modul verwendeten Klassen usw.

Wenn das Modul implementiert ist, können diese Rückruffunktionen über die folgenden Makros implementiert werden:

PHP_MINIT_FUNCTION(myphpextension)
{
//注册常量或者类等初始化操作
return SUCCESS;
}

PHP_RINIT_FUNCTION(myphpextension)
{
//例如记录请求开始时间
//随后在请求结束的时候记录结束时间。这样我们就能够记录处理请求所花费时间了
return SUCCESS;
}
Nach dem Login kopieren

Nachdem die PHP-Skriptanforderung verarbeitet wurde, tritt sie in die Endphase ein. Im Allgemeinen tritt PHP in die Endphase ein, wenn das Skript bis zum Ende ausgeführt wird oder die Exit- oder Die-Funktion aufgerufen wird.

Endphase

Die Endphase von PHP gliedert sich in zwei Teile: Deaktivieren des Moduls und Schließen des Moduls.

RSHUTDOWN
Deaktivieren Sie das Modul (entsprechend RINIT)

MSHUTDOWN
Schließen Sie das Modul (entsprechend MINIT)

CLI/CGI-Modus PHP ist ein Single -Prozess-SAPI-Modell. Dies bedeutet, dass das PHP-Skript nach einmaliger Ausführung geschlossen wird und alle Variablen und Funktionen nicht mehr verwendet werden können. Das heißt, im CGI-Modus können Variablen derselben PHP-Datei nicht in anderen PHP-Dateien verwendet werden.

Schauen wir uns anhand eines Beispiels den SAPI-Lebenszyklus von Single-Threaded-PHP an.

Single-Threaded SAPI-Lebenszyklus
Zum Beispiel:

php -f test.php
Nach dem Login kopieren

Initialisierung jedes erweiterten MINIT-Moduls aufrufen
Test.php anfordern
Aufruf Aktivieren Sie jeweils das erweiterte RINIT-Modul.
Führen Sie test.php aus.
Rufen Sie RSHUTDOWN jeder Erweiterung auf, um das Modul zu deaktivieren.
Bereinigen Sie die Variablen und den Speicher nach der Ausführung von test.php.
Rufen Sie MSHUTDOWN jeder Erweiterung auf Schließen Sie das Modul
Stoppen Sie die PHP-Ausführung

Das Obige ist ein einfacher Ausführungsprozess, und einige Ergänzungen werden unten vorgenommen.

Bevor die Modulinitialisierung jedes Moduls aufgerufen wird, führt PHP einen Initialisierungsprozess durch, der Folgendes umfasst:
Initialisierung mehrerer globaler Variablen
In den meisten Fällen werden sie auf NULL gesetzt.

Mehrere Konstanten initialisieren
Die Konstanten hier sind einige von PHPs eigenen Konstanten.

Zend-Engine und Kernkomponenten initialisieren
Zu den Initialisierungsvorgängen gehören die Initialisierung der Speicherverwaltung, die Initialisierung globaler Funktionszeiger, die lexikalische Analyse, die Syntaxanalyse von PHP-Quelldateien und die Zuweisung von Funktionszeigern für die Zwischencodeausführung. Initialisieren Sie mehrere HashTables (z. B. Funktionstabellen, Konstantentabellen usw.), bereiten Sie sich auf das Parsen von INI-Dateien vor, bereiten Sie sich auf das Parsen von PHP-Quelldateien vor, registrieren Sie integrierte Funktionen, Standardkonstanten, globale GLOBALS-Variablen usw.

Parse php.ini
liest die Datei php.ini, legt Konfigurationsparameter fest, lädt die Zend-Erweiterung und registriert PHP-Erweiterungsfunktionen.

Initialisierung globaler Betriebsfunktionen
Initialisieren Sie einige globale Variablen, die häufig im Benutzerbereich verwendet werden, wie zum Beispiel: $_GET, $_POST, $_FILES usw.

Statisch erstellte Module und gemeinsam genutzte Module initialisieren (MINIT)
Standardmäßig geladene Module initialisieren.
Die Modulinitialisierung führt folgende Operationen aus:
Registrieren Sie das Modul in der Liste der registrierten Module.
Registrieren Sie die in jedem Modul enthaltenen Funktionen in der Funktionstabelle.

Deaktivieren Sie Funktionen und Klassen.

Die Die Funktion „zend_disable_function“ wird aufgerufen, um die durch die Variable „disable_functions“ in der PHP-Konfigurationsdatei dargestellte Funktion aus der CG-Funktionstabelle (function_table) zu löschen.

Zend-Engine aktivieren
Verwenden Sie die Funktion init_compiler, um den Compiler zu initialisieren.

SAPI aktivieren
Verwenden Sie die Funktion sapi_activate, um SG (sapi_headers) und SG (request_info) zu initialisieren und einige Inhalte für die HTTP-Anfragemethode festzulegen.

Umgebungsinitialisierung
Initialisieren Sie einige Umgebungsvariablen, die in Benutzersteuerelementen verwendet werden müssen. Einschließlich Serverumgebung, Anforderungsdatenumgebung usw.

Initialisierung der Modulanforderung
PHP ruft die Funktion zend_activate_modules auf, um alle in der Variablen module_registry registrierten Module zu durchlaufen, und ruft seine RINIT-Methode auf, um die Anforderungsinitialisierungsoperation des Moduls zu implementieren.

Nach der Verarbeitung des dateibezogenen Inhalts ruft PHP php_request_startup auf, um den Anforderungsinitialisierungsvorgang durchzuführen:

Zend-Engine aktivieren
SAPI aktivieren
Umgebungsinitialisierung
Modulanforderungsinitialisierung

Codeausführung
Nachdem alle oben genannten Vorbereitungen abgeschlossen sind, beginnt die Ausführung des PHP-Programms. PHP führt über zend_compile_file lexikalische Analysen, Syntaxanalysen und Zwischencode-Generierungsvorgänge durch und gibt alle Zwischencodes dieser Datei zurück. Wenn die analysierte Datei gültigen Zwischencode generiert, wird zend_excute aufgerufen, um den Zwischencode auszuführen. . Wenn bei der Ausführung Ausnahmen auftreten und der Benutzer die Behandlung dieser Ausnahmen definiert hat, werden diese Ausnahmebehandlungsfunktionen aufgerufen. Nachdem alle Vorgänge verarbeitet wurden, gibt PHP das Ergebnis über EG (return_value_ptr_ptr) zurück.

DEAKTIVIERUNG (Anfrage schließen)
Der Prozess des PHP-Schließens einer Anfrage besteht aus mehreren Schließvorgängen, und dieser Satz ist in der Funktion php_request_shutdown vorhanden. Dazu gehört:

Aufrufen aller über register_shutdown_function() registrierten Funktionen. Diese beim Herunterfahren aufgerufenen Funktionen wurden im Benutzerbereich hinzugefügt.
Führen Sie alle verfügbaren __destruct-Funktionen aus. Zu den Destruktoren gehören hier die Destruktoren aller Objekte im Objektpool (EG (objects_store)) und die Destruktormethoden jedes Elements in EG (symbol_table).
Alle Ausgaben löschen
Zerstören Sie die Variablen der globalen Variablentabelle (PG (http_globals)).
Schließen Sie den Lexer, den Parser und den Zwischencode-Executor über die Funktion zend_deactivate.
Rufen Sie grundsätzlich jeden erweiterten post_deactivate_func-Funktionszeiger auf ist NULL.
Schließen Sie den Inhalt von SG (sapi_headers), SG (request_info) usw.
Schließen Sie die Speicherverwaltung die maximale Ausführungszeit


Ende

Wenn PHP einen Prozess beendet, ruft es die Funktion sapi_flush auf, um den letzten Inhalt zu löschen. Die Funktion zend_shutdown fährt die Zend-Engine herunter >Referenz: [http://www.php-internals.com/book/](http://www.php-internals.com/book/)

Das Obige stellt vor, wie PHP funktioniert, einschließlich verschiedener Aspekte. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

CakePHP-Projektkonfiguration CakePHP-Projektkonfiguration Sep 10, 2024 pm 05:25 PM

In diesem Kapitel werden wir die Umgebungsvariablen, die allgemeine Konfiguration, die Datenbankkonfiguration und die E-Mail-Konfiguration in CakePHP verstehen.

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

CakePHP Datum und Uhrzeit CakePHP Datum und Uhrzeit Sep 10, 2024 pm 05:27 PM

Um in cakephp4 mit Datum und Uhrzeit zu arbeiten, verwenden wir die verfügbare FrozenTime-Klasse.

CakePHP-Datei hochladen CakePHP-Datei hochladen Sep 10, 2024 pm 05:27 PM

Um am Datei-Upload zu arbeiten, verwenden wir den Formular-Helfer. Hier ist ein Beispiel für den Datei-Upload.

CakePHP-Routing CakePHP-Routing Sep 10, 2024 pm 05:25 PM

In diesem Kapitel lernen wir die folgenden Themen im Zusammenhang mit dem Routing kennen.

Besprechen Sie CakePHP Besprechen Sie CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP ist ein Open-Source-Framework für PHP. Es soll die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich vereinfachen. CakePHP basiert auf einer MVC-ähnlichen Architektur, die sowohl leistungsstark als auch leicht zu verstehen ist. Modelle, Ansichten und Controller gu

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

CakePHP erstellt Validatoren CakePHP erstellt Validatoren Sep 10, 2024 pm 05:26 PM

Der Validator kann durch Hinzufügen der folgenden zwei Zeilen im Controller erstellt werden.

See all articles