Heim > Artikel > Backend-Entwicklung > Was ist der Unterschied zwischen CGI und FCGI in PHP?
Der Unterschied zwischen CGI und FCGI in PHP: CGI ist die Abkürzung für „Common Gateway Interface“, die sich auf die Common Gateway-Schnittstelle bezieht, während fcgi die Abkürzung für „Fast Common Gateway Interface“ ist, die sich auf das Fast Common Gateway bezieht Schnittstelle. „php-cgi“ ist die Implementierung des CGI-Protokolls und „PHP-FPM“ ist die Implementierung des FCGI-Protokolls.
Die Betriebsumgebung dieses Artikels: Windows 10-System, PHP-Version 8.1, Dell G3-Computer
CGI: gemeinsame Gateway-Schnittstelle
FCGI : schnelle gemeinsame Gateway-Schnittstelle schnelle gemeinsame Gateway-Schnittstelle
php-cgi ist die Implementierung des CGI-Protokolls und PHP-FPM ist die Implementierung des FCGI-Protokolls.
CGI ist die Protokollschnittstelle für die Kommunikation zwischen Webservern wie Nginx und dynamischen Back-End-Skriptsprachen wie PHP.
Wissen erweitern
1. Szenario:
Der Browser fordert einen Webserver wie nginx an. Wenn es sich bei der Anfrage um eine statische index.html handelt, kann nginx diese direkt zurückgeben. Wenn die Anforderung jedoch idex.php lautet, stellt Nginx fest, dass es sich gemäß der Konfiguration nicht um eine statische Ressource handelt, und muss den Back-End-Dienst anfordern. Wenn Nginx also den Back-End-Dienst anfordert, in welchem Format und welche Daten muss es an den Back-End-Dienst senden? CGI ist ein Protokoll, das Formate und Daten definiert.
2. Nachteile des CGI-Protokolls:
Das CGI-Protokoll muss jedes Mal, wenn es einen Back-End-Dienst anfordert, das Programm starten, das das CGI-Protokoll implementiert. Hier ist der PHP-Parser. Der PHP-Parser analysiert die PHP.ini-Datei, führt Initialisierungsarbeiten durch, verarbeitet Anforderungen und gibt Ergebnisse zurück. Jede Anfrage muss neu initialisiert werden, was eine zu überflüssige Arbeit darstellt. Daher entstand FCGI.
Da PHP eine interpretierte Sprache ist, wird ein Interpreter benötigt, um den PHP-Code zu interpretieren.
3. Vorteile von FCGI:
Das FCGI-Protokoll startet zunächst einen Master, der zum Parsen der PHP.ini-Datei und zur Durchführung von Initialisierungsarbeiten verwendet wird. Starten Sie mehrere Worker, und Worker werden zur Verarbeitung bestimmter Anforderungen verwendet. Dies trennt die Initialisierung und die Verarbeitung spezifischer Anforderungen. Dies erfordert auch ein Programm zur Verwaltung von Master und Workern, daher erschien PHP-FPM.
FCGI übernimmt die C/S-Architektur. Trennen Sie den Webserver vom Skript-Parsing-Server. Stellen Sie sicher, dass der Webserver nur statische Ressourcen verarbeitet und die vom Back-End-Skriptanalyseserver zurückgegebenen Daten an den Browser zurückgibt.
Der Webserver Nginx unterstützt kein direktes Aufrufen oder Parsen externer Programme wie PHP-Programme, daher muss er über die CGI-Schnittstelle aufgerufen werden. Dies erfordert tatsächlich die Kapselung von CGI, um einen Wrapper zu bilden, der eigentlich PHP-FPM ist. Nginx ruft PHP-FPM auf, PHP-FPM ruft dann den Back-End-PHP-Code auf und PHP-FPM gibt das Ergebnis dann an Nginx zurück.
Jetzt wurde PHP-FPM in den PHP-Kern integriert.
PHP-FPM und Nginx werden häufig auf verschiedenen Servern bereitgestellt, um den Druck auf Front-End-Nginx zu verringern, statische Ressourcen zu verarbeiten und dynamische Anforderungen weiterzuleiten.
Und FCGI ist auch sicherer als CGI.
4. Implementierung des CGI-Protokolls PHP-CGI
Wenn die Datei php.ini geändert wird, kann der Übergang von PHP-CGI nicht reibungslos erfolgen. Das heißt, das PHP-CGI-Programm muss neu gestartet werden, um diese neuen Konfigurationen zu verwenden.
5. Implementierung des FCGI-Protokolls PHP-FPM
Wenn die php.ini-Datei geändert wird, kann PHP-FPM einen reibungslosen Übergang erreichen. Der Worker wird vor der Änderung nach der Verarbeitung der Anforderung zerstört und der neu generierte Worker kann die neue Konfiguration verwenden. Dadurch wird auch ein reibungsloser Übergang erreicht.
Wenn außerdem der PHP-CGI-Prozess hängt, kann PHP nicht ausgeführt werden. PHP-FPM hat dieses Problem nicht, der Daemon startet einen untergeordneten Prozess reibungslos neu.
Bevor PHP-FPM erschien, gab es tatsächlich spawn-fcgi, das aus lighthttpd entwickelt wurde. PHP-FPM kann während der Initialisierung mehrere Worker erstellen. Wenn ein Worker inaktiv ist, kann er recycelt werden.
spawn-fcgi kann Speicherlecks verursachen oder FCGI sogar automatisch neu starten, wenn die Parallelität hoch ist.
Empfohlenes Lernen: „PHP-Video-Tutorial“
Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen CGI und FCGI in PHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!