Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Ausführungsprozess und verwandte Konzepte

PHP-Ausführungsprozess und verwandte Konzepte

不言
不言Original
2018-07-06 13:48:291666Durchsuche

Dieser Artikel stellt hauptsächlich den Ausführungsprozess und die damit verbundenen Konzepte von PHP vor. Er hat einen gewissen Referenzwert. Jetzt können Freunde in Not darauf zurückgreifen.

Schauen wir uns zunächst an, welche Unterstützung zum Ausführen eines PHP-Programms erforderlich ist. Der Ausgangspunkt von allem ist, dass es sinnvoll ist, PHP von Programmierern zu schreiben, daher sind PHP-Skriptdateien auf Anwendungsebene (einschließlich verschiedener PHP-Codes von Drittanbietern in Composer/include) erforderlich. Skriptdateien müssen analysiert und kompiliert werden, bevor sie ausgeführt werden können. Daher ist auch eine virtuelle PHP-Maschine (normalerweise eine Zend-Engine) erforderlich. Darüber hinaus verwenden PHP-Skripte Funktionen und Klassen in mehreren Erweiterungen, sodass Erweiterungen (einschließlich offizieller, PECL- und benutzerdefinierter Erweiterungen) fast notwendig sind. Darüber hinaus müssen PHP-Programme mit der Außenwelt interagieren (z. B. Parameter von der Befehlszeile abrufen und Anforderungsinformationen vom Webserver abrufen). Diese Schicht ist für SAPI verantwortlich, daher ist auch SAPI erforderlich.

Um das oben Gesagte zusammenzufassen: Die Architektur des PHP-Programms besteht von oben nach unten aus vier Schichten, nämlich: Anwendungsschicht, SAPI-Schicht, Erweiterungsschicht und Zend-Engine. Die architektonische Beziehung ist in der folgenden Abbildung dargestellt:

PHP-Ausführungsprozess und verwandte Konzepte (Bildquelle: http://www.nowamagic.net/libr...)

Die SAPI-Schicht ist für manche Menschen möglicherweise relativ unbekannt. SAPI bietet einen einheitlichen Satz von Schnittstellen, um Anwendungen der oberen Schicht von der tatsächlichen Betriebsumgebung zu entkoppeln. Von Benutzern geschriebene PHP-Dateien können über die Befehlszeile oder in Apache httpd oder FPM ausgeführt werden. Der dahinter stehende Support wird von SAPI bereitgestellt und ist den Entwicklern nicht bekannt. Durch SAPI muss sich die PHP-Skriptschicht nicht zu viele Gedanken über die spezifische Ausführungsumgebung machen, und PHP selbst kann es SAPI ermöglichen, einzigartige Implementierungen basierend auf seinen eigenen Merkmalen bereitzustellen.

Ausführungsprozess

Abgesehen von den Unterschieden in verschiedenen SAPI-Implementierungen kann der Ausführungsprozess des PHP-Programms einfach wie folgt zusammengefasst werden:

    Programm startet, Zend-Engine und Kernkomponenteninitialisierung;
  1. Erweiterungsinitialisierung (MINIT);
  2. Anfrage empfangen, Erweiterungsaktivierung (RINIT); >
  3. PHP-Skripte analysieren und ausführen;
  4. Die Anfrage endet und die Erweiterung wird deaktiviert (RSHUTDOWN);
  5. Deinstallieren Sie die Erweiterung (MSHUTDOWN);
  6. Programm herunterfahren
  7. Mit Ausnahme von 345 werden die verbleibenden Schritte nur einmal in der gesamten SAPI ausgeführt Lebenszyklus. Im CGI/CLI-Modus wird 345 nur einmal ausgeführt.
Das Verständnis des Lebenszyklus von PHP-Programmen ist ein wesentlicher Prozess für die Weiterentwicklung von PHP und kann Entwicklern auch dabei helfen, Probleme schnell zu lokalisieren. Wenn das Skript beispielsweise meldet, dass die Funktion nicht vorhanden ist, ist es sehr wahrscheinlich, dass eine Erweiterung fehlt oder ein Ladefehler im CLI/CGI-Modus vorliegt, egal wie

die Ressource vergeblich ist wird freigegeben, sobald das Skript ausgeführt wird. Die Ausführung des Skripts bedeutet nicht unbedingt das Ende des Prozesses, nachdem das Skript kompiliert wurde. Es bleibt im Speicher und führt RINIT und RSHUTDOWN nicht wiederholt aus ist ein Leistungsverbesserungspunkt des CLI-Frameworks im Vergleich zu anderen Betriebsmodi usw.

Weitere Einzelheiten zu den einzelnen Phasen im SAPI-Lebenszyklus finden Sie im Buch „In-Depth Understanding of the PHP Core“. pconnectexit/dieCGI, FastCGI, PHP-FPM usw.

CGI/FastCGI/php-cgi und PHP-FPM sind mehrere Konzepte, die PHP-Entwickler leicht verwirren und verwirren können. Die Beziehung zwischen diesen Konzepten ist wie folgt:

CGI/FastCGI:网关协议,与语言无关,所以与PHP关系也不大。两者的区别是FastCGI可以独立于web服务器,运行FastCGI协议的程序变成web服务器的内容提供方(上游)。另外与web服务器解耦后,用FastCGI协议交互的进程具有性能好、安全稳定、支持分布式等优点;

php-cgi:实现FastCGI协议的PHP解析器,不能平滑重启和热加载;

FPM:PHP官方的FastCGI进程管理器,可执行程序为php-fpm;支持平滑重启、热加载,运行稳定;其管理对象不是php-cgi进程,两者没什么关系。

Nur einige wenige Konzepte sind leichter zu unterscheiden. Was Entwickler tatsächlich verwirrt, ist die Kombination der folgenden vier Gruppen von Konzepten:

Webserver. Gemeinsames Apache httpd und Nginx;

  1. SAPI. Übliche sind Apache2handler, cli, fpm-fcgi

  2. Protokoll. CGI und FastCGI werden im Artikel

  3. erwähnt. Nämlich php-cgi und php-fpm.

  4. Da der Webserver den meisten Menschen bekannter ist, sprechen wir über seine Beziehung zu anderen Konzepten: Bei der Verwendung von Apache httpd werden PHP-Skripte in mehr als 90 % der Fälle in ausgeführt Es handelt sich also um ein Modul, das mit Apache2handler in SAPI zusammenhängt und nichts mit anderen Konzepten zu tun hat (weder CGI noch das FastCGI-Protokoll. Bei Verwendung von Nginx wird die Anforderung in 90 % der Fälle über das FastCGI-Protokoll an FPM weitergeleitet.) im Zusammenhang mit fpm-fcgi in SAPI und den Protokollen FastCGI und php-fpm im Programm beziehen sich auf die drei Konzepte und haben nichts mit anderen Konzepten zu tun.

  5. Zusammenfassung

Dieser Artikel gibt einen kurzen Überblick über die Architektur und den Ausführungsprozess von PHP-Programmen und stellt einige leicht verwirrende Konzepte vor.

Vielen Dank fürs Lesen, Korrekturen sind willkommen!

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er für das Studium aller hilfreich ist. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.

Verwandte Empfehlungen:

Analyse des PHP-Containers Pimple-Laufprozess

Vorteile der Verwendung des Laravel-Servicecontainers

Das obige ist der detaillierte Inhalt vonPHP-Ausführungsprozess und verwandte Konzepte. 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