Heim >Schlagzeilen >Ausführliche Erklärung der fünf gängigen PHP-Betriebsmodi

Ausführliche Erklärung der fünf gängigen PHP-Betriebsmodi

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼nach vorne
2020-01-06 17:57:104382Durchsuche

Ausführliche Erklärung der fünf gängigen PHP-Betriebsmodi

Über die fünf gängigen Betriebsmodi von PHP:

1) CGI (Common Gateway Interface)

2) FastCGI (Resident CGI/Long-Live CGI)

3) CLI (Command Line Run/Command Line Interface)

4) Webmodulmodus (Webserver wie Apache Running-Modus)

5) ISAPI (Internet Server Application Program Interface)

Hinweis: Nach PHP5.3 verfügt PHP nicht mehr über einen ISAPI-Modus und nach der Installation dieser Datei gibt es keine php5isapi.dll mehr. Um eine höhere Version von PHP auf IIS6 zu verwenden, müssen Sie die FastCGI-Erweiterung installieren und dann IIS6 für die Unterstützung von FastCGI aktivieren.

1.1. CGI-Modus

CGI ist Common Gateway Interface. Für Laien ist CGI wie eine Brücke, die Webseiten mit dem verbindet Wenn es sich um ein Ausführungsprogramm im Webserver handelt, leitet es die von HTML empfangenen Anweisungen an das Ausführungsprogramm des Servers weiter und gibt dann die Ergebnisse des Ausführungsprogramms des Servers an die HTML-Seite zurück. CGI ist äußerst plattformübergreifend und kann auf fast jedem Betriebssystem implementiert werden. CGI ist bereits ein älteres Modell und wurde in den letzten Jahren nur noch selten eingesetzt.

Jedes Mal, wenn eine Benutzeranfrage vorliegt, wird zuerst ein CGI-Unterprozess erstellt, dann wird die Anfrage verarbeitet und der Unterprozess wird nach der Verarbeitung beendet. Dies ist das Fork-And-Execute Modus. Wenn die Anzahl der Benutzeranforderungen sehr groß ist, werden große Mengen an Systemressourcen wie Speicher, CPU-Zeit usw. belegt, was zu einer geringen Leistung führt. Daher verfügt ein Server, der CGI verwendet, über so viele CGI-Unterprozesse wie Verbindungsanforderungen. Das wiederholte Laden von Unterprozessen ist der Hauptgrund für die geringe CGI-Leistung.

Wenn Sie PHP nicht in serverseitige Software (wie Apache) einbetten und als Modul installieren möchten, können Sie es im CGI-Modus installieren. Oder verwenden Sie PHP mit verschiedenen CGI-Wrappern, um sichere Chroot- und Setuid-Umgebungen für Ihren Code zu erstellen. Auf diese Weise fordert jeder Client eine PHP-Datei an, und der Webserver ruft php.exe (php.exe unter Win, php unter Linux) auf, um die Datei zu interpretieren, und gibt dann das Ergebnis der Interpretation in Form von an den Client zurück eine Webseite. Diese Installationsmethode installiert normalerweise die ausführbare PHP-Datei im cgi-bin-Verzeichnis des Webservers. Die CERT-Empfehlung CA-96.11 empfiehlt, keine Interpreter im cgi-bin-Verzeichnis abzulegen. Der Vorteil dieser Methode besteht darin, dass sie den Webserver von der spezifischen Programmverarbeitung trennt, eine klare Struktur und eine starke Kontrollierbarkeit aufweist. Gleichzeitig besteht der Nachteil darin, dass der CGI-Prozesszweig zu einem riesigen wird Stellen Sie sich vor, dass Hunderte von gleichzeitigen Anforderungen dazu führen, dass der Server Hunderte von Prozessen aufteilt, und Sie werden verstehen. Aus diesem Grund war CGI schon immer für seine geringe Leistung und seinen hohen Ressourcenverbrauch bekannt.

1.2, FastCGI-Modus

FastCGI ist eine aktualisierte Version von CGI, die wie ein langlebiges CGI ist und immer ausgeführt werden kann Da es aktiviert ist, dauert der Fork nicht jedes Mal eine Weile (dies ist der am meisten kritisierte Fork-and-Execute-Modus von CGI).

FastCGI ist eine skalierbare Hochgeschwindigkeits-Kommunikationsschnittstelle zwischen HTTP-Servern und dynamischen Skriptsprachen. Die meisten gängigen HTTP-Server unterstützen FastCGI, darunter Apache, Nginx und lighttpd. Gleichzeitig wird FastCGI auch von vielen Skriptsprachen unterstützt, darunter PHP.

Der FastCGI-Schnittstellenmodus verwendet eine C/S-Struktur, die den HTTP-Server und den Skript-Parsing-Server trennen und gleichzeitig einen oder mehrere Skript-Parsing-Daemons auf dem Skript-Parsing-Server starten kann. Jedes Mal, wenn der HTTP-Server auf ein dynamisches Programm trifft, kann es zur Ausführung direkt an den FastCGI-Prozess übermittelt und das Ergebnis dann an den Browser zurückgegeben werden. Mit dieser Methode kann der HTTP-Server ausschließlich statische Anforderungen verarbeiten oder die Ergebnisse des dynamischen Skriptservers an den Client zurückgeben, was die Leistung des gesamten Anwendungssystems erheblich verbessert.

[Prinzip]

1) Der FastCGI-Prozessmanager (IIS ISAPI oder Apache-Modul) wird geladen, wenn der Webserver startet

2) Der FastCGI-Prozessmanager initialisiert sich selbst , Starten Sie mehrere CGI-Interpreterprozesse (sichtbar mehrere php-cgi.exe oder php-cig) und warten Sie auf Verbindungen vom Webserver

3) Wenn die Client-Anfrage den Webserver erreicht, wird der FastCGI-Prozessmanager ausgewählt und eine Verbindung zu einem CGI-Interpreter herstellen. Der Webserver sendet die CGI-Umgebungsvariablen und Standardeingaben an den FastCGI-Unterprozess php-cgi

4) Nachdem der FastCGI-Unterprozess die Verarbeitung abgeschlossen hat, gibt er die Standardausgabe und Fehlerinformationen an den Webserver zurück aus derselben Verbindung. Wenn der untergeordnete FastCGI-Prozess die Verbindung schließt, wird die Anfrage verarbeitet. Der untergeordnete FastCGI-Prozess wartet dann auf die nächste Verbindung vom FastCGI-Prozessmanager (der in WebServer ausgeführt wird) und verarbeitet diese. Im normalen CGI-Modus wird php-cgi.exe hier beendet.

Im CGI-Modus können Sie sich vorstellen, wie langsam CGI normalerweise ist. Jede Webanfrage an PHP muss php.ini neu analysieren, alle DLL-Erweiterungen neu laden und alle Datenstrukturen neu initialisieren. Bei FastCGI geschieht dies alles nur einmal, nämlich beim Start des Prozesses. Ein zusätzlicher Bonus besteht darin, dass dauerhafte Datenbankverbindungen funktionieren.

Hinweis: Der FastCGI-Prozessmanager von PHP ist PHP-FPM (PHP-FastCGI Process Manager)

[Vorteile]

1) Aus Stabilitätsgründen verwendet FastCGI einen unabhängigen Prozesspool zum Ausführen von CGI. Wenn ein einzelner Prozess ausfällt, kann das System ihn problemlos verwerfen und dann einen neuen Prozess zum Ausführen der Logik zuweisen 2) Aus Sicherheitsgründen unterstützt FastCGI verteiltes Rechnen. FastCGI ist völlig unabhängig vom Host-Server, egal wie stark FastCGI ausfällt, der Server wird dadurch nicht heruntergefahren.

3) Aus Leistungssicht trennt FastCGI die Verarbeitung der dynamischen Logik vom Server. Überlassen Sie die E/A-Verarbeitung mit hoher Auslastung immer noch dem Host-Server, damit sich der Host-Server auf E/A konzentrieren kann. Für eine normale dynamische Webseite gibt es möglicherweise nur einen kleinen Teil der logischen Verarbeitung und eine große Anzahl statischer Bilder wie zum Beispiel Bilder.

【Nachteile】

Nachdem wir über die Vorteile gesprochen haben, sprechen wir über die Nachteile. Aus meiner tatsächlichen Verwendung heraus eignet sich der FastCGI-Modus besser für Server in Produktionsumgebungen. Für Entwicklungsmaschinen ist es jedoch nicht geeignet. Denn wenn man Zend Studio zum Debuggen des Programms verwendet, geht FastCGI davon aus, dass der PHP-Prozess abgelaufen ist und gibt einen 500-Fehler auf der Seite zurück. Das war so ärgerlich, dass ich auf meinem Entwicklungscomputer wieder in den ISAPI-Modus wechselte. Die Unterstützung für neue Versionen einiger Server ist nicht gut und eine modulare Installation, die keinen verteilten Lastausgleich erfordert, ist die bessere Wahl. Die aktuelle Kommunikation zwischen FastCGI und dem Server ist nicht intelligent genug. Wenn die Ausführung eines FastCGI-Prozesses zu lange dauert, wird er als toter Prozess abgebrochen. Dies ist bei der Verarbeitung langfristiger Aufgaben sehr problematisch um Online-Debugging zu ermöglichen. Da es sich um einen Multiprozess handelt, verbraucht er mehr Serverspeicher als CGI-Multithreading. Der PHP-CGI-Interpreter verbraucht 7 bis 25 Megabyte Speicher pro Prozess. Multipliziert man diese Zahl mit 50 oder 100, ist dies eine große Speichermenge.


1.3 CLI-Modus

PHP-CLI ist die Abkürzung für PHP Command Line Interface. Wie der Name schon sagt, handelt es sich um die Schnittstelle, auf der PHP ausgeführt werden kann Die Befehlszeile unterscheidet sich von der PHP-Umgebung (PHP-CGI, ISAPI usw.), die auf dem Webserver ausgeführt wird. Mit anderen Worten: PHP kann nicht nur Front-End-Webseiten schreiben, sondern auch zum Schreiben von Back-End-Programmen verwendet werden. PHP CLI Shell Scripting gilt für alle PHP-Vorteile und ermöglicht die Erstellung von Skripten oder serverseitigen Systemen oder sogar mit GUI-Anwendungen. Der PHP-CLI-Modus wird sowohl unter Windows als auch unter Linux unterstützt.


[Vorteile]

1) Bei Verwendung mehrerer Prozesse ist der Kernel nach Beendigung des untergeordneten Prozesses für das Recycling von Ressourcen verantwortlich.

2) Bei Verwendung mehrerer Prozesse , der untergeordnete Prozess wird abnormal sein. Das Beenden führt nicht dazu, dass der gesamte Prozess-Thread beendet wird, und der übergeordnete Prozess hat immer noch die Möglichkeit, den Prozess neu zu erstellen

3) Ein residenter Hauptprozess ist nur für die Aufgabenverteilung verantwortlich , und die Logik ist klarer.

Unter Linux verwenden wir häufig „php -m“, um herauszufinden, welche Erweiterungen PHP installiert hat. Dies ist der PHP-Befehlszeilen-Ausführungsmodus. Interessierte Schüler können „php -h“ eingeben, um diesen Ausführungsmodus eingehend zu studieren .


1.4 Modulmodus

Der Modulmodus ist in Form des Moduls mod_php5 integriert. Derzeit besteht die Funktion des Moduls mod_php5 darin, PHP-Dateianforderungen zu empfangen Von Apache übergeben und diese Anforderungen verarbeiten und dann die verarbeiteten Ergebnisse an Apache zurückgeben. Wenn wir das PHP-Modul


(mod_php5) in seiner Konfigurationsdatei konfigurieren, bevor Apache startet, registriert das PHP-Modul den ap_hook_post_config-Hook von Apache2 und startet dieses Modul, wenn Apache beginnt, PHP-Dateien zu akzeptieren.


Zusätzlich zu dieser Lademethode beim Start können Apache-Module dynamisch zur Laufzeit geladen werden, was bedeutet, dass der Server erweitert werden kann, ohne den Quellcode neu zu kompilieren, oder sogar überhaupt nicht anhalten zu müssen Der Server. Wir müssen lediglich das Signal HUP oder AP_SIG_GRACEFUL an den Server senden, um den Server zu benachrichtigen, das Modul neu zu laden. Vor dem dynamischen Laden müssen wir das Modul jedoch in eine dynamische Linkbibliothek kompilieren. Beim dynamischen Laden wird zu diesem Zeitpunkt die dynamische Linkbibliothek geladen. Die Verarbeitung dynamischer Linkbibliotheken in Apache wird über das Modul mod_so abgeschlossen, sodass das Modul mod_so nicht dynamisch geladen, sondern nur statisch in den Kern von Apache kompiliert werden kann. Dies bedeutet, dass es zusammen mit Apache gestartet wird.


Wie lädt Apache Module? Nehmen wir als Beispiel das zuvor erwähnte Modul mod_php5. Zuerst müssen wir der Konfigurationsdatei httpd.conf eine Zeile hinzufügen:

LoadModule php5_module modules/mod_php5.so

Hier verwenden wir den LoadModule-Befehl. Der erste Parameter des Befehls ist der Name des Moduls im Modul gefunden. Die zweite Option ist der Pfad, in dem sich das Modul befindet. Wenn Sie ein Modul laden müssen, während der Server läuft, können Sie das Signal HUP oder AP_SIG_GRACEFUL an den Server senden. Sobald das Signal empfangen wird, lädt Apache das Modul neu, ohne den Server neu zu starten.


Dieser Betriebsmodus wird häufig verwendet, wenn der Apache-Server in der Windows-Umgebung verwendet wird. Bei der Modularisierung (DLL) wird PHP zusammen mit dem Webserver gestartet und ausgeführt. (Es handelt sich um eine auf CGI basierende Erweiterung von Apache, um die Betriebseffizienz von PHP zu beschleunigen.)


1.5 ISAPI-Modus

ISAPI (Internet Server Application Program Interface) ist eine Reihe von API-Schnittstellen für Internetdienste, die von Microsoft bereitgestellt werden. Eine ISAPI-DLL kann sich im Speicher befinden, nachdem sie durch eine Benutzeranforderung aktiviert wurde, auf eine andere Benutzeranforderung warten und auch verwendet werden In einer DLL sind mehrere Benutzeranforderungsverarbeitungsfunktionen eingerichtet. Darüber hinaus befinden sich die ISAPI-DLL-Anwendung und der WWW-Server im selben Prozess, und die Effizienz ist deutlich höher als bei CGI. (Aufgrund der Exklusivität von Microsoft kann es nur in der Windows-Umgebung ausgeführt werden)

PHP ist ein Apache-Modul. Nachdem der Apache-Server das System gestartet hat, generiert es vorab mehrere Prozesskopien und befindet sich im Speicher Sobald eine Anfrage auftritt, werden diese inaktiven Teilprozesse sofort zur Verarbeitung verwendet, sodass keine Verzögerung durch die Generierung von Teilprozessen entsteht. Diese Serverkopien werden nicht sofort nach der Verarbeitung einer HTTP-Anfrage beendet, sondern verbleiben auf dem Computer und warten auf die nächste Anfrage. Die Reaktion auf Client-Browseranfragen ist schneller und die Leistung ist höher.

Die chinesische PHP-Website bietet eine große Anzahl kostenloser PHP-Einführungs-Tutorials, die jeder gerne lernen kann!

Dieser Artikel wurde reproduziert von: https://www.jianshu.com/p/e9eef6dc7d67

Stellungnahme:
Dieser Artikel ist reproduziert unter:jianshu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen

In Verbindung stehende Artikel

Mehr sehen