Heim > Backend-Entwicklung > PHP-Tutorial > Detaillierte Erläuterung der PHP-Ausführungsprinzipien und -Prozesse

Detaillierte Erläuterung der PHP-Ausführungsprinzipien und -Prozesse

不言
Freigeben: 2023-03-24 13:18:01
Original
1584 Leute haben es durchsucht

Der Inhalt dieses Artikels ist eine detaillierte Erklärung der Ausführungsprinzipien und -prozesse von PHP. Jetzt kann ich ihn mit allen teilen.

Einführung


Schauen Sie sich zunächst den folgenden Prozess an:
• Wir haben den PHP-bezogenen Prozess nie manuell gestartet, er wird ausgeführt, wenn Apache gestartet wird.
• PHP übergibt mod_php5. Das so-Modul ist mit Apache verbunden (insbesondere SAPI, Server Application Programming Interface);
• PHP hat insgesamt drei Module: Kernel, Zend-Engine und Erweiterungsschicht; um Anfragen, Datei-Streaming, 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 PHP verwendet eine Reihe von Funktionen, Klassenbibliotheken und Streams, 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_MINIT_FUNCTION(extension_name){  
/* Initialize functions, classes etc */  }
Nach dem Login kopieren
1
  • 2
  • 3
  • PHP startet den zweiten Schritt
 • Wenn eine Seitenanforderung erfolgt, ü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 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, wird die Variable $_SESSION initialisiert, wenn die RINIT des Moduls aufgerufen wird, und der relevante Inhalt wird eingelesen; • Die RINIT-Methode kann als Vorbereitungsprozess betrachtet werden und startet automatisch zwischen Programmausführungen.

Eine typische RINIT-Methode ist wie folgt:




1
PHP_RINIT_FUNCTION(extension_name) {  
/* Initialize session variables, pre-populate variables, redefine global variables etc */  }
Nach dem Login kopieren
  • 2

  • 3

PHP关闭第一步

如同PHP启动一样,PHP的关闭也分两步:
  • 一旦页面执行完毕(无论是执行到了文件末尾还是用exit或die函数中止),PHP就会启动清理程序。它会按顺序调用各个模块的RSHUTDOWN方法。
  • RSHUTDOWN用以清除程序运行时产生的符号表,也就是对每个变量调用unset函数。
  一个典型的RSHUTDOWN方法如下:

PHP_RSHUTDOWN_FUNCTION(extension_name) {  
/* Do memory management, unset all variables used in the last PHP call etc */  
}
Nach dem Login kopieren
  • 1

  • 2

  • 3

PHP关闭第二步

最后,所有的请求都已处理完毕,SAPI也准备关闭了,PHP开始执行第二步:
  • PHP调用每个扩展的MSHUTDOWN方法,这是各个模块最后一次释放内存的机会。
  一个典型的RSHUTDOWN方法如下:

PHP_MSHUTDOWN_FUNCTION(extension_name) {  
/* Free handlers and persistent memory etc */  }
Nach dem Login kopieren
  • 1

  • 2

  • 3

这样,整个PHP生命周期就结束了。要注意的是,只有在服务器没有请求的情况下才会执行“启动第一步”和“关闭第二步”。 
  下面的是用一些图示来说明的!

PHP底层工作原理

Detaillierte Erläuterung der PHP-Ausführungsprinzipien und -Prozesse

  从图上可以看出,php从下到上是一个4层体系 
  ①Zend引擎 
  Zend整体用纯c实现,是php的内核部分,它将php代码翻译(词法、语法解析等一系列编译过程)为可执行opcode的处理并实现相应的处理方法、实现了基本的数据结构(如hashtable、oo)、内存分配及管理、提供了相应的api方法供外部调用,是一切的核心,所有的外围功能均围绕zend实现。 
  ②Extensions 
  围绕着zend引擎,extensions通过组件式的方式提供各种基础服务,我们常见的各种内置函数(如array系列)、标准库等都是通过extension来实现,用户也可以根据需要实现自己的extension以达到功能扩展、性能优化等目的(如贴吧正在使用的php中间层、富文本解析就是extension的典型应用)。 
  ③Sapi 
  Sapi全称是Server Application Programming Interface,也就是服务端应用编程接口,sapi通过一系列钩子函数,使得php可以和外围交互数据,这是php非常优雅和成功的一个设计,通过sapi成功的将php本身和上层应用解耦隔离,php可以不再考虑如何针对不同应用进行兼容,而应用本身也可以针对自己的特点实现不同的处理方式。后面将在sapi章节中介绍 
  ④上层应用 
  这就是我们平时编写的php程序,通过不同的sapi方式得到各种各样的应用模式,如通过webserver实现web应用、在命令行下以脚本方式运行等等。

Architektonische Ideen:

Das Modell Engine (Zend) + Komponente (ext) reduziert die interne Kopplung
Die mittlere Schicht (Sapi) isoliert den Webserver und PHP
**************************************************** *** ************
Wenn PHP ein Auto ist, dann
Das Framework des Autos ist PHP selbst
Zend ist der Motor ( 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 fährt das Auto 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 der PHP-Ausführungsprinzipien und -Prozesse

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 wir 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 alle künftigen URL-Benutzeranfragen mit PHP als Suffix das Modul php5_module (mod_php5.so/php5apache2.dll) zur Verarbeitung aufrufen müssen.

Apach-Lebenszyklus

Detaillierte Erläuterung der PHP-Ausführungsprinzipien und -Prozesse

Apach-Anfrageverarbeitungsprozess

Detaillierte Erläuterung der PHP-Ausführungsprinzipien und -Prozesse

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 Hauptarbeit von Apache in dieser Phase: Zuordnen der angeforderten URL zum lokalen Dateisystem. 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 Hauptaufgabe von Apache in dieser Phase besteht darin, den Header der Anfrage zu überprüfen. 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 relevanten Regeln des MIME-Typs der angeforderten Ressource zu bestimmen. 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 Hauptaufgabe 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 der Transaktion, nachdem die Antwort an den Client gesendet wurde. Module können die Standardprotokollierung von Apache ändern oder ersetzen.
11. Bereinigungsphase
Apaches Hauptaufgabe in dieser Phase: Bereinigen der Umgebung, die nach Abschluss dieser Anforderungstransaktion zurückbleibt, z. B. die Verarbeitung von Dateien und Verzeichnissen oder das Schließen von Sockets usw. Diese wird verarbeitet von Apache in einer Anfrage Die letzte Phase.

LAMP-Architektur

Detaillierte Erläuterung der PHP-Ausführungsprinzipien und -Prozesse

Vier Schichten von unten nach oben:
①liunx gehört zur untersten Schicht des Betriebssystems
②Apache-Server, der gehört zum sekundären Server und kommuniziert Linux und PHP
 ③php: Es ist eine serverseitige Programmiersprache und ist über das php_module-Modul mit Apache verknüpft
 ④Mysql und andere Webdienste: Es ist ein Anwendungsdienst und ist mit verbunden MySQL über das Plugin-Modul „Erweiterungen“ von PHP

Verwandte Empfehlungen:

Detaillierte grafische Code-Erklärung der Ausführungsprinzipien und -prozesse von PHP

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

Verwandte Etiketten:
Quelle:php.cn
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