Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung des grafischen Codes der Ausführungsprinzipien und -prozesse von PHP

Detaillierte Erläuterung des grafischen Codes der Ausführungsprinzipien und -prozesse von PHP

黄舟
黄舟Original
2017-08-10 11:47:073851Durchsuche


Einführung

Schauen wir uns den folgenden Prozess an:
• Wir haben den PHP-bezogenen Prozess nie manuell gestartet, er wird ausgeführt, wenn Apache startet
• PHP ist über das Modul mod_php5.so (insbesondere SAPI, die Server-Anwendungsprogrammierschnittstelle) mit Apache verbunden: • PHP verfügt über insgesamt drei Module: Kernel, Zend-Engine und Erweiterungsschicht; Der Kernel wird verwendet, um Anfragen, Dateiströme, Fehlerbehandlung und andere damit verbundene Vorgänge zu verarbeiten.
 • Die Zend-Engine (ZE) wird verwendet, um Quelldateien in Maschinensprache zu konvertieren und sie dann auf einer virtuellen Maschine auszuführen Layer ist eine Reihe von Funktionen, Bibliotheken und Streams, die PHP verwendet, um bestimmte Vorgänge auszuführen. Beispielsweise benötigen wir die MySQL-Erweiterung, um eine Verbindung zur MySQL-Datenbank herzustellen.
• Wenn ZE das Programm ausführt, muss es möglicherweise eine Verbindung zu mehreren Erweiterungen herstellen. Zu diesem Zeitpunkt übergibt ZE die Kontrolle an die Erweiterung und gibt sie anschließend zurück Verarbeitung der spezifischen Aufgabe;
• Schließlich gibt ZE die Ergebnisse der Programmausführung an den PHP-Kernel zurück, der die Ergebnisse dann an die SAPI-Schicht überträgt und sie schließlich an den Browser ausgibt.
Eingehend erforschen
Moment, so einfach ist das nicht. Der obige Prozess ist nur eine vereinfachte Version. Schauen wir uns etwas genauer an, um zu sehen, was sich sonst noch hinter den Kulissen abspielt.
 • Nach dem Start von Apache startet auch der PHP-Interpreter.
 • Der PHP-Startvorgang besteht aus zwei Schritten Zyklusfunktion;
 • Der zweite Schritt besteht darin, einige Variableneinstellungen nur für die aktuelle Anfrage zu generieren.

Der erste Schritt beim Starten von PHP

Ich weiß nicht, was der erste und der zweite Schritt sind? Machen Sie sich keine Sorgen, wir werden dies als Nächstes ausführlich besprechen. Schauen wir uns zunächst den ersten und wichtigsten Schritt an. Beachten Sie, dass der erste Schritt des Vorgangs erfolgt, bevor Anfragen eingehen.

 • Nach dem Start von Apache startet auch der PHP-Interpreter

 • PHP ruft die MINIT-Methode jeder Erweiterung auf, um diese Erweiterungen in einen verfügbaren Zustand zu versetzen. Sehen Sie sich an, welche Erweiterungen in der Datei php.ini geöffnet sind.

  • MINIT bedeutet „Modulinitialisierung“. Jedes Modul definiert eine Reihe von Funktionen, Klassenbibliotheken usw. zur Bearbeitung anderer Anforderungen.

 Eine typische MINIT-Methode ist wie folgt:


PHP startet den zweiten Schritt

  • Wenn eine Seitenanforderung auftritt, übergibt die SAPI-Schicht die Kontrolle an die PHP-Schicht. Daher legt PHP die Umgebungsvariablen fest, die zur Beantwortung dieser Anfrage erforderlich sind. Gleichzeitig wird eine Variablentabelle erstellt, in der die während der Ausführung generierten Variablennamen und -werte gespeichert werden.
PHP_MINIT_FUNCTION(extension_name){  
/* Initialize functions, classes etc */  }
 • PHP ruft die RINIT-Methode jedes Moduls auf, bei der es sich um „Anforderungsinitialisierung“ handelt. Ein klassisches Beispiel ist die RINIT des Session-Moduls, wenn das Session-Modul in php.ini aktiviert ist und der entsprechende Inhalt eingelesen wird, wenn die RINIT des Moduls aufgerufen wird. Die RINIT-Methode kann als Vorbereitungsprozess betrachtet werden und startet automatisch zwischen Programmausführungen.

Eine typische RINIT-Methode ist wie folgt:


Der erste Schritt des PHP-Herunterfahrens

Genau wie das PHP-Starten ist auch das PHP-Herunterfahren in zwei Schritte unterteilt:

• Sobald die Seite ausgeführt wird (unabhängig davon, ob sie das Ende der Datei erreicht oder mit der Exit- oder Die-Funktion beendet wird), startet PHP das Bereinigungsprogramm. Es ruft nacheinander die RSHUTDOWN-Methode jedes Moduls auf.
PHP_RINIT_FUNCTION(extension_name) {  
/* Initialize session variables, pre-populate variables, redefine global variables etc */  }
  • RSHUTDOWN wird verwendet, um die Symboltabelle zu löschen, die generiert wird, wenn das Programm ausgeführt wird, d. h. die Unset-Funktion wird für jede Variable aufgerufen.

Eine typische RSHUTDOWN-Methode lautet wie folgt:


PHP-Abschaltschritt 2

Schließlich wurden alle Anfragen verarbeitet, SAPI ist zum Schließen bereit und PHP beginnt mit der Ausführung von Schritt 2 Schritt 2:

• PHP ruft die MSHUTDOWN-Methode jeder Erweiterung auf. Dies ist die letzte Chance für jedes Modul, Speicher freizugeben.
PHP_RSHUTDOWN_FUNCTION(extension_name) {  
/* Do memory management, unset all variables used in the last PHP call etc */  
}
Eine typische RSHUTDOWN-Methode sieht wie folgt aus:

Auf diese Weise ist der gesamte PHP-Lebenszyklus abgeschlossen. Es ist zu beachten, dass „Starten des ersten Schritts“ und „Schließen des zweiten Schritts“ nur dann ausgeführt werden, wenn keine Anfrage vom Server vorliegt.
Das Folgende wird mit einigen Abbildungen illustriert!

Das zugrunde liegende Arbeitsprinzip von PHP
PHP_MSHUTDOWN_FUNCTION(extension_name) {  
/* Free handlers and persistent memory etc */  }


Wie auf dem Bild zu sehen ist, ist PHP von unten nach oben ein 4-Schichten-System
①Zend-Engine
Zend ist in reinem C implementiert und ist der Kernbestandteil von PHP. Es übersetzt PHP-Code (lexikalisch). und Syntaxanalyse und eine Reihe von Kompilierungsvorgängen), um ausführbare Opcodes zu verarbeiten und entsprechende Verarbeitungsmethoden zu implementieren, grundlegende Datenstrukturen (wie Hashtable, oo), Speicherzuweisung und -verwaltung zu implementieren und entsprechende API-Methoden für externe Aufrufe bereitzustellen Der Kern und alle peripheren Funktionen sind rund um Zend implementiert.
 ②Erweiterungen
Rund um die Zend-Engine stellen Erweiterungen verschiedene grundlegende Dienste auf Komponentenbasis bereit. Unsere gemeinsamen verschiedenen integrierten Funktionen (z. B. Array-Serien), Standardbibliotheken usw. werden alle durch Erweiterungen implementiert Benutzer können bei Bedarf auch eigene Erweiterungen implementieren, um Funktionserweiterungen, Leistungsoptimierungen und andere Zwecke zu erreichen (z. B. sind die PHP-Mittelschicht und die Rich-Text-Analyse, die derzeit von Tieba verwendet werden, typische Erweiterungsanwendungen).
 ③Sapi
 Der vollständige Name von Sapi ist Server Application Programming Interface. Dabei handelt es sich um die Server-Anwendungsprogrammierschnittstelle, die es PHP ermöglicht, über eine Reihe von Hook-Funktionen mit Peripheriedaten zu interagieren PHP entkoppelt und isoliert PHP selbst erfolgreich von übergeordneten Anwendungen. PHP kann nicht mehr berücksichtigen, wie es mit verschiedenen Anwendungen kompatibel ist, und die Anwendung selbst kann auch unterschiedliche Verarbeitungsmethoden entsprechend ihren eigenen Eigenschaften implementieren. Es wird später im Sapi-Kapitel vorgestellt
④Oberschichtige Anwendung
Dies ist das PHP-Programm, das wir normalerweise schreiben. Wir können verschiedene Anwendungsmodi über verschiedene Sapi-Methoden erhalten, z. B. die Implementierung von Webanwendungen über den Webserver und die Verwendung des Befehls Zeile. Als Skript ausführen und mehr.

Architektonische Ideen:

Das Engine- (Zend) + Komponentenmodell (ext) reduziert die interne Kopplung
Die mittlere Schicht (Sapi) isoliert den Webserver und PHP
  ************************************************ **** ******************
Wenn PHP ein Auto ist, dann
das Framework des Autos php selbst
Zend ist der Motor des Autos
Die verschiedenen Komponenten unter Ext sind die Räder des Autos
Sapi kann als Straße betrachtet werden und das Auto kann auf verschiedenen Straßentypen fahren
Und die Ausführung eines PHP-Programms ist wie Autos auf der Straße.
Daher benötigen wir: Motor mit hervorragender Leistung + geeignete Räder + korrekte Landebahn

Die Beziehung zwischen Apache und PHP

Apaches Analyse von PHP wird durch PHP in vielen Modulen abgeschlossen.

Detaillierte Erläuterung des grafischen Codes der Ausführungsprinzipien und -prozesse von PHP

Um PHP endlich in das Apache-System zu integrieren, müssen Sie einige notwendige Einstellungen für Apache vornehmen. Hier nehmen wir zur Erläuterung den SAPI-Betriebsmodus mod_php5 von PHP als Beispiel. Das Konzept von SAPI werden wir später ausführlich erläutern.
Angenommen, die von uns installierten Versionen sind Apache2 und PHP5, dann müssen Sie die Hauptkonfigurationsdatei von Apache http.conf bearbeiten und die folgenden Zeilen hinzufügen:
In einer Unix/Linux-Umgebung:
LoadModule php5_module module/ mod_php5.so
AddType application/x-httpd-php .php
Hinweis: module/mod_php5.so ist der Installationsort der Datei mod_php5.so in der X-Systemumgebung.
 In der Windows-Umgebung:
 LoadModule php5_module d:/php/php5apache2.dll
 AddType application/x-httpd-php .php
 Hinweis: d:/php/php5apache2.dll befindet sich in Windows Installationsort der Datei php5apache2.dll in der Umgebung.
Diese beiden Konfigurationen teilen dem Apache-Server mit, dass jede URL-Benutzeranfrage, die in Zukunft mit PHP als Suffix empfangen wird, durch Aufrufen des Moduls php5_module (mod_php5.so/php5apache2.dll) verarbeitet werden muss.

Apach-Lebenszyklus

Detaillierte Erläuterung des grafischen Codes der Ausführungsprinzipien und -prozesse von PHP

Apach-Anfrageverarbeitungsprozess

Detaillierte Erläuterung des grafischen Codes der Ausführungsprinzipien und -prozesse von PHP

Detaillierte Erläuterung des Apache-Anforderungsverarbeitungszyklus

Was wird in den 11 Phasen des Apache-Anforderungsverarbeitungszyklus getan?
1. Post-Read-Request-Phase
Im normalen Anforderungsverarbeitungsprozess ist dies die erste Phase, in der das Modul Hooks einfügen kann. Diese Phase kann für Module genutzt werden, die sehr früh mit der Bearbeitung von Anfragen beginnen möchten.
2. URI-Übersetzungsphase
Die Hauptaufgabe von Apache in dieser Phase besteht darin, die angeforderte URL dem lokalen Dateisystem zuzuordnen. Module können in dieser Phase Hooks einfügen, um ihre eigene Mapping-Logik auszuführen. mod_alias nutzt diese Phase zum Arbeiten.
3. Header-Parsing-Phase
Die Hauptarbeit von Apache in dieser Phase: Überprüfen des Headers der Anfrage. Da das Modul die Aufgabe übernehmen kann, Anforderungsheader an jedem Punkt des Anforderungsverarbeitungsablaufs zu überprüfen, wird dieser Hook selten verwendet. mod_setenvif nutzt diese Phase zum Arbeiten.
 4. Zugriffskontrollphase
 Die Hauptarbeit von Apache in dieser Phase: Überprüfen, ob der Zugriff auf die angeforderte Ressource gemäß der Konfigurationsdatei zulässig ist. Die Standardlogik von Apache implementiert Zulassungs- und Ablehnungsanweisungen. mod_authz_host nutzt diese Phase, um zu funktionieren.
5. Authentifizierungsphase
Die Hauptarbeit von Apache in dieser Phase besteht darin, Benutzer gemäß den in der Konfigurationsdatei festgelegten Richtlinien zu authentifizieren und den Benutzernamensbereich festzulegen. Module können in dieser Phase Hooks einfügen, um eine Authentifizierungsmethode zu implementieren.
6. Autorisierungsphase
Die Hauptaufgabe von Apache in dieser Phase besteht darin, zu prüfen, ob authentifizierte Benutzer den angeforderten Vorgang basierend auf der Konfigurationsdatei ausführen dürfen. Das Modul kann in dieser Phase Hooks einfügen, um eine Methode zur Benutzerrechteverwaltung zu implementieren.
7. Phase der MIME-Typprüfung
Die Hauptaufgabe von Apache in dieser Phase besteht darin, die zu verwendende Inhaltsverarbeitungsfunktion basierend auf den Regeln zu bestimmen, die sich auf den MIME-Typ der angeforderten Ressource beziehen. Die Standardmodule mod_negotiation und mod_mime implementieren diesen Hook.
8. FixUp-Phase
Dies ist eine allgemeine Phase, die es dem Modul ermöglicht, alle erforderlichen Verarbeitungen vor dem Inhaltsgenerator auszuführen. Ähnlich wie Post_Read_Request ist dies ein Hook, der beliebige Informationen erfassen kann und auch der am häufigsten verwendete Hook ist.
9. Antwortphase
Die Hauptarbeit von Apache in dieser Phase besteht darin, an den Client zurückgegebene Inhalte zu generieren und für das Senden einer angemessenen Antwort an den Client verantwortlich zu sein. Diese Phase ist der Kernbestandteil des gesamten Prozesses.
10. Protokollierungsphase
Die Hauptarbeit von Apache in dieser Phase: Aufzeichnen von Transaktionen, nachdem die Antwort an den Client gesendet wurde. Module können die Standardprotokollierung von Apache ändern oder ersetzen.
11. CleanUp-Phase
Apaches Hauptaufgabe in dieser Phase: Bereinigen der Umgebung, die nach Abschluss dieser Anforderungstransaktion übrig bleibt, z. B. die Verarbeitung von Dateien und Verzeichnissen oder das Schließen von Sockets usw. Dies wird von verarbeitet Apache in einer Anfrage Die letzte Stufe.

LAMP-Architektur

Detaillierte Erläuterung des grafischen Codes der Ausführungsprinzipien und -prozesse von PHP

Vier Schichten von unten nach oben:
 ①liunx gehört zur untersten Schicht des Betriebssystems
 ②Apache-Server gehört zum sekundären Server und kommuniziert Linux und PHP
 ③php: Es gehört zur serverseitigen Programmiersprache und ist über das Modul php_module mit Apache verknüpft
 ④Mysql und andere Webdienste: Es gehört zu Anwendungsdiensten und ist damit verbunden mit MySQL über das Erweiterungs-Plug-in-Modul von PHP

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des grafischen Codes der Ausführungsprinzipien und -prozesse von PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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