Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erklärung der Funktionsweise von PHP

Detaillierte Erklärung der Funktionsweise von PHP

小云云
小云云Original
2018-03-15 13:05:0914875Durchsuche

1. Alle PHP-Anwendungen werden über den WEB-Server (wie IIS, Nginx oder Apache) und die PHP-Engine-Programminterpretation und -Ausführung abgeschlossen. Der Arbeitsprozess:

(1) Wenn der Benutzer die Browseradresse eingibt Geben Sie den Dateinamen der PHP-Seite ein, auf die zugegriffen werden soll, lösen Sie dann eine Web-Anfrage aus und übermitteln Sie die Anfrage an den WEB-Server.

(2) Der WEB-Server nimmt diese Anfrage an und erkennt anhand ihres Suffixes, dass es sich um eine PHP-Anfrage handelt. Der WEB-Server ruft die PHP-Anwendung, auf die der Benutzer zugreifen möchte, von der Festplatte oder dem Speicher ab und sendet sie zum PHP-Programm.

(3) Das PHP-Engine-Programm scannt die vom WEB-Server gesendete Datei von Anfang bis Ende, liest sie gemäß dem Befehl aus dem Hintergrund, verarbeitet die Daten und generiert dynamisch die entsprechende HTML-Seite.

(4) Die PHP-Engine generiert eine HTML-Seite und sendet sie an den WEB-Server zurück. Der WEB-Server gibt dann die HTML-Seite an den Client-Browser zurück.

2. PHP-Betriebsmodus:

1) cgi Common Gateway Interface)

2) fast-cgi langlebiger Typ CGI

3) cli Befehlszeilenbetrieb (Befehlszeilenschnittstelle)

4) Webmodulmodus (Modulmodus zum Ausführen von Webservern wie Apache)

Zusätzliche Erklärung:

1) Modulmodus:

Der Modulmodus ist in Form des Moduls mod_php5 integriert. Zu diesem Zeitpunkt besteht die Funktion des Moduls mod_php5 darin, von Apache übergebene PHP-Dateianforderungen zu empfangen, diese Anforderungen zu verarbeiten und dann die verarbeiteten Ergebnisse zurückzugeben zu Apache. 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, Anfragen für PHP-Dateien anzunehmen.

Zusätzlich zu dieser Lademethode beim Start können die Module von Apache zur Laufzeit dynamisch geladen werden, was bedeutet, dass der Server erweitert werden kann, ohne dass der Quellcode neu kompiliert werden muss oder der Server überhaupt angehalten werden muss. 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.

2) PHP-Laufmodus in Nginx (Nginx+ PHP-FPM)

Einzelheiten finden Sie im Abschnitt zum Nginx + PHP-Prinzip

Ergänzung:

1. CGI, Fast-CGI-Protokoll

Geschichte von CGI

Der vollständige Name von CGI ist „Common Gateway Interface“ (Common Gateway Interface), mit dem der HTTP-Server kommuniziert mit Ihren oder anderen Maschinen Ein Werkzeug zum „Sprechen“ mit einem Programm auf einem Netzwerkserver, das auf einem Netzwerkserver ausgeführt werden muss. CGI kann in jeder Sprache geschrieben werden, solange die Sprache über Standard-Eingabe-, Ausgabe- und Umgebungsvariablen verfügt. Wie PHP, Perl, TCL usw.

Frühe Webserver verarbeiteten nur statische Dateien wie HTML, aber mit der Entwicklung der Technologie erschienen dynamische Sprachen wie PHP. Der Webserver kann damit nicht umgehen, was soll ich tun? Dann überlassen Sie es dem PHP-Interpreter! Aber wie kommuniziert der PHP-Interpreter mit dem Webserver?

Um das Kommunikationsproblem zwischen verschiedenen Sprachinterpretern (z. B. PHP-, Python-Interpretern) und dem Webserver zu lösen, erschien das CGI-Protokoll. Solange Sie ein Programm gemäß dem CGI-Protokoll schreiben, können Sie eine Kommunikation zwischen dem Sprachinterpreter und dem Webserver erreichen. Wie zum Beispiel ein PHP-CGI-Programm.

Verbesserungen von Fast-CGI

Mit dem CGI-Protokoll wird das Problem der Kommunikation zwischen dem PHP-Interpreter und dem Webserver gelöst und der Webserver kann endlich dynamische Sprachen verarbeiten. Allerdings wird der Webserver jedes Mal, wenn er eine Anfrage erhält, einen CGI-Prozess forken und den Prozess dann beenden, nachdem die Anfrage abgeschlossen ist. Bei 10.000 Anfragen muss der PHP-CGI-Prozess 10.000 Mal geforkt und beendet werden. Haben Sie jemals festgestellt, dass es eine Verschwendung von Ressourcen ist? Als Ergebnis erschien eine verbesserte Version von CGI, Fast-CGI.

Nachdem Fast-CGI jedes Mal eine Anfrage verarbeitet, wird der Prozess nicht beendet, sondern beibehalten, sodass der Prozess mehrere Anfragen gleichzeitig verarbeiten kann. Auf diese Weise ist es nicht erforderlich, einen Prozess jedes Mal neu zu forken, was die Effizienz erheblich verbessert. FastCGI ist eine sprachunabhängige, offene CGI-Erweiterung mit skalierbarer Architektur. Ihr Hauptverhalten besteht darin, den CGI-Interpreterprozess im Speicher zu halten und so eine höhere Leistung zu erzielen. Wie wir alle wissen, ist das wiederholte Laden des CGI-Interpreters der Hauptgrund für eine geringe CGI-Leistung. Wenn der CGI-Interpreter im Speicher bleibt und die Planung des FastCGI-Prozessmanagers akzeptiert, kann er gute Leistung, Skalierbarkeit, Failover-Funktionen usw. bieten.

2. Was ist php-fpm

PHP-FPM ist ein PHP-FastCGI-Manager, der nur für PHP verwendet wird. PHP-FPM ist eigentlich ein Patch des PHP-Quellcodes, der die FastCGI-Prozessverwaltung in das PHP-Paket integrieren soll. PHP-FPM bietet eine bessere PHP-Prozessverwaltungsmethode, mit der Speicher und Prozesse effektiv gesteuert und die PHP-Konfiguration reibungslos neu geladen werden können.
Der Prozess umfasst zwei Arten von Prozessen: Master-Prozess und Worker-Prozess.
Es gibt nur einen Master-Prozess, der für das Abhören des Ports und den Empfang von Anforderungen vom Webserver verantwortlich ist, während es im Allgemeinen mehrere Worker-Prozesse gibt (die spezifische Anzahl wird entsprechend den tatsächlichen Anforderungen konfiguriert). Jeder Prozess verfügt über ein PHP Darin ist ein Interpreter eingebettet, bei dem es sich um PHP handelt, in dem der Code tatsächlich ausgeführt wird.

Verwandte Empfehlungen:

Analyse der Funktionsprinzipien von Apache und PHP

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung der Funktionsweise 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