Maison >développement back-end >Problème PHP >Quelle est la différence entre cgi et fcgi en php
La différence entre cgi et fcgi en php : cgi est l'abréviation de "common gateway interface", qui fait référence à l'interface de passerelle commune, tandis que fcgi est l'abréviation de "fast common gateway interface", qui fait référence à la passerelle commune rapide interface. "php-cgi" est l'implémentation du protocole CGI et "PHP-FPM" est l'implémentation du protocole FCGI.
L'environnement d'exploitation de cet article : système Windows 10, PHP version 8.1, ordinateur Dell G3
CGI : interface de passerelle commune Interface de passerelle commune
FCGI ? : interface de passerelle commune rapide Interface de passerelle commune rapide
php-cgi est l'implémentation du protocole CGI, et PHP-FPM est l'implémentation du protocole FCGI.
CGI est l'interface de protocole pour la communication entre les serveurs Web tels que nginx et les langages de script dynamiques back-end tels que PHP.
Développer les connaissances
1. Scénario :
Le navigateur demande un serveur Web tel que nginx Si la requête est un index.html statique, nginx peut le renvoyer directement. Mais si la requête est idex.php, nginx constate qu'il ne s'agit pas d'une ressource statique selon la configuration et doit demander le service back-end. Ainsi, lorsque nginx demande le service back-end, dans quel format et quel type de données doit-il envoyer au service back-end ? CGI est un protocole qui définit les formats et les données.
2. Inconvénients du protocole CGI :
Le protocole CGI doit démarrer le programme qui implémente le protocole CGI à chaque fois qu'il demande un service back-end, voici l'analyseur PHP. L'analyseur PHP analysera le fichier PHP.ini, effectuera le travail d'initialisation, traitera les requêtes et renverra les résultats. Chaque requête doit être réinitialisée, ce qui constitue un travail trop redondant. C’est ainsi que FCGI a vu le jour.
Parce que PHP est un langage interprété, un interprète est nécessaire pour interpréter le code PHP.
3. Avantages de FCGI :
Le protocole FCGI démarre d'abord un maître, qui est utilisé pour analyser le fichier PHP.ini et effectuer le travail d'initialisation. Démarrez plusieurs travailleurs, et les travailleurs sont utilisés pour traiter des demandes spécifiques. Cela sépare l'initialisation et le traitement des demandes spécifiques. Cela nécessite également un programme pour gérer le maître et les travailleurs, c'est pourquoi PHP-FPM est apparu.
FCGI adopte l'architecture C/S. Séparez le serveur Web du serveur d'analyse de script. Faites en sorte que le serveur Web traite uniquement les ressources statiques et renvoie les données renvoyées par le serveur d'analyse de script back-end au navigateur.
Le serveur Web nginx ne prend pas en charge l'appel direct ou l'analyse de programmes externes tels que les programmes PHP, il doit donc être appelé via l'interface CGI. Cela nécessite en fait l'encapsulation de CGI pour former un wrapper, qui est en fait PHP-FPM. nginx appelle PHP-FPM, PHP-FPM appelle ensuite le code PHP back-end, puis PHP-FPM renvoie le résultat à nginx.
Maintenant, PHP-FPM a été intégré au noyau PHP.
PHP-FPM et nginx sont souvent déployés sur différents serveurs pour réduire la pression sur nginx front-end pour traiter les ressources statiques et transmettre les requêtes dynamiques.
Et FCGI est également plus sûr que CGI.
4. Implémentation du protocole CGI PHP-CGI
Si le fichier php.ini est modifié, PHP-CGI ne peut pas effectuer une transition fluide. Autrement dit, le programme PHP-CGI doit être redémarré pour utiliser ces nouvelles configurations.
5. Implémentation du protocole FCGI PHP-FPM
Si le fichier php.ini est modifié, PHP-FPM peut réaliser une transition en douceur. Pour le travailleur avant modification, après traitement de la demande, il sera détruit et le travailleur nouvellement généré pourra utiliser la nouvelle configuration. Cela permet également d'obtenir une transition en douceur.
De plus, si le processus PHP-CGI se bloque, PHP ne pourra pas s'exécuter. PHP-FPM n'a pas ce problème, le démon redémarrera en douceur un processus enfant.
Avant l'apparition de PHP-FPM, il existait en fait spawn-fcgi, développé à partir de lighthttpd. PHP-FPM peut créer plusieurs travailleurs lors de l'initialisation, et lorsqu'un travailleur est inactif, il peut être recyclé.
spawn-fcgi peut provoquer des fuites de mémoire ou même redémarrer automatiquement FCGI lorsque la concurrence est élevée.
Apprentissage recommandé : "Tutoriel vidéo PHP"
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!