Maison > Article > développement back-end > Cinq modes de fonctionnement majeurs de PHP
Les cinq modes de fonctionnement courants de PHP sont CGI (Common Gateway Interface/Common Gateway Interface), FastCGI (Resident CGI/Long-Live CGI), CLI (Command Line Interface), Mode module Web (le mode dans lequel les serveurs Web tels qu'Apache s'exécutent), ISAPI (Internet Server Application Program Interface), j'espère cet article peut aider tout le monde.
Remarque : Après PHP5.3, PHP n'a plus de mode ISAPI, et le fichier php5isapi.dll n'existe plus après l'installation. Pour utiliser une version supérieure de PHP sur IIS6, vous devez installer l'extension FastCGI, puis activer IIS6 pour prendre en charge FastCGI.
1.1. Mode CGI
CGI est l'interface Common Gateway, qui est un programme en termes simples, CGI est comme un pont qui relie les pages Web et le programme d'exécution du serveur Web. Il transmet les instructions reçues par HTML au programme d'exécution du serveur, puis renvoie les résultats du programme d'exécution du serveur à la page HTML. CGI offre d'excellentes performances multiplateformes et peut être implémenté sur presque tous les systèmes d'exploitation. CGI est déjà un modèle plus ancien et a rarement été utilisé ces dernières années.
Chaque fois qu'il y a une demande d'utilisateur, un sous-processus CGI sera d'abord créé, puis la demande sera traitée et le sous-processus sera terminé après le traitement. le mode Fork-And-Execute. Lorsque le nombre de requêtes utilisateur est très important, une grande quantité de ressources système telles que la mémoire, le temps CPU, etc. sera occupée, ce qui entraînera de faibles performances. Par conséquent, un serveur utilisant CGI aura autant de sous-processus CGI qu'il y a de demandes de connexion. Le chargement répété de sous-processus est la principale raison des faibles performances CGI.
Si vous ne souhaitez pas intégrer PHP dans un logiciel côté serveur (comme Apache) et l'installer en tant que module, vous pouvez choisir de l'installer en mode CGI. Ou utilisez PHP avec différents wrappers CGI pour créer des environnements chroot et setuid sécurisés pour votre code. De cette façon, chaque client demande un fichier PHP, et le serveur Web appelle php.exe (php.exe sous win, php sous Linux) pour interpréter le fichier, puis renvoie le résultat de l'interprétation au client sous la forme de une page Internet. Cette méthode d'installation installe généralement le fichier exécutable PHP dans le répertoire cgi-bin du serveur Web. La recommandation CERT CA-96.11 recommande de ne placer aucun interpréteur dans le répertoire cgi-bin. L'avantage de cette méthode est qu'elle sépare le serveur Web du traitement spécifique du programme, avec une structure claire et une forte contrôlabilité. En même temps, l'inconvénient est que s'il y a une forte demande d'accès, le processus CGI Fork deviendra un énorme serveur. fardeau. , imaginez que des centaines de requêtes simultanées amènent le serveur à bifurquer des centaines de processus et vous comprendrez. C'est pourquoi CGI a toujours été connu pour ses faibles performances et sa consommation élevée de ressources.
1.2, mode FastCGI
FastCGI est une version améliorée de FastCGI est comme un CGI de longue durée Il peut être exécuté tout entier. Tant qu'il est activé, il ne faudra pas de temps pour effectuer un Fork à chaque fois (c'est le mode fork-and-execute le plus critiqué de CGI).
FastCGI est une interface évolutive et haut débit pour la communication entre les serveurs HTTP et les langages de script dynamiques. Les serveurs HTTP les plus populaires prennent en charge FastCGI, notamment Apache, Nginx et lighttpd. Dans le même temps, FastCGI est également pris en charge par de nombreux langages de script, notamment PHP.
Le mode d'interface FastCGI adopte la structure C/S, qui peut séparer le serveur HTTP et le serveur d'analyse de script, et démarrer un ou plusieurs démons d'analyse de script sur le serveur d'analyse de script en même temps. Chaque fois que le serveur HTTP rencontre un programme dynamique, celui-ci peut être transmis directement au processus FastCGI pour exécution, puis le résultat est renvoyé au navigateur. Cette méthode permet au serveur HTTP de traiter exclusivement les requêtes statiques ou de renvoyer les résultats du serveur de script dynamique au client, ce qui améliore considérablement les performances de l'ensemble du système d'application.
[Principe]
1) Le gestionnaire de processus FastCGI (IIS ISAPI ou Apache Module) est chargé au démarrage du serveur Web
2) Le gestionnaire de processus FastCGI s'initialise et démarre plusieurs ; Processus interpréteur CGI (visible plusieurs php-cgi.exe ou php-cig) et attendez la connexion depuis le serveur Web ;
3) Lorsque la requête du client atteint le serveur Web, le gestionnaire de processus FastCGI sélectionne et se connecte à un interprète CGI. Le serveur Web envoie les variables d'environnement CGI et l'entrée standard au sous-processus FastCGI php-cgi
4) Une fois le traitement terminé, le sous-processus FastCGI renvoie la sortie standard et les informations d'erreur au serveur Web. à partir de la même connexion. Lorsque le processus enfant FastCGI ferme la connexion, la demande est traitée. Le processus enfant FastCGI attend et gère ensuite la prochaine connexion du gestionnaire de processus FastCGI (exécuté dans WebServer). En mode CGI normal, php-cgi.exe se termine ici.
En mode CGI, vous pouvez imaginer à quel point le CGI est généralement lent. Chaque requête Web adressée à PHP doit réanalyser le php.ini, recharger toutes les extensions dll et réinitialiser toutes les structures de données. Avec FastCGI, tout cela ne se produit qu'une seule fois, lorsque le processus démarre. Un avantage supplémentaire est que les connexions persistantes aux bases de données fonctionnent.
Remarque : le gestionnaire de processus FastCGI de PHP est PHP-FPM (PHP-FastCGI Process Manager)
[Avantages]
1) Depuis stable Depuis un Du point de vue des performances, FastCGI utilise un pool de processus indépendant pour exécuter CGI. Si un seul processus meurt, le système peut facilement le supprimer, puis réaffecter un nouveau processus pour exécuter la logique
2) Du point de vue de la sécurité, voir ; , FastCGI prend en charge l'informatique distribuée. FastCGI est complètement indépendant du serveur hôte. Quelle que soit la manière dont FastCGI tombe en panne, il ne fera pas tomber le serveur
3) D'un point de vue performances, FastCGI sépare le traitement de la logique dynamique du serveur ; Le traitement des E/S à forte charge est toujours laissé au serveur hôte, afin que le serveur hôte puisse se concentrer sur les E/S. Pour une page Web dynamique ordinaire, il ne peut y avoir qu'une petite partie du traitement logique et un grand nombre d'images statiques. et ainsi de suite.
【Inconvénients】
Après avoir parlé des avantages, parlons des inconvénients. D'après mon utilisation actuelle, le mode FastCGI est plus adapté aux serveurs dans les environnements de production. Mais il ne convient pas aux machines de développement. Parce que lorsque vous utilisez Zend Studio pour déboguer le programme, FastCGI pensera que le processus PHP a expiré et renverra une erreur 500 sur la page. C'était tellement ennuyeux que je suis revenu en mode ISAPI sur ma machine de développement. La prise en charge des nouvelles versions de certains serveurs n'est pas bonne et une installation modulaire ne nécessitant pas d'équilibrage de charge distribué est un meilleur choix. La communication actuelle entre FastCGI et le serveur n'est pas assez intelligente. Si un processus FastCGI prend trop de temps à s'exécuter, il sera arrêté et redémarré comme un processus mort. Cela est très gênant lors du traitement de tâches à long terme. pour permettre le débogage en ligne. Parce qu'il est multi-processus, il consomme plus de mémoire serveur que le multithreading CGI. L'interpréteur PHP-CGI consomme 7 à 25 mégaoctets de mémoire par processus. Multiplier ce nombre par 50 ou 100 représente une grande quantité de mémoire.
Mode CLI 1.3
PHP-CLI est l'abréviation de PHP Command Line Interface Comme son nom l'indique, PHP s'exécute sur la ligne de commande. L'interface est différente de l'environnement PHP (PHP-CGI, ISAPI, etc.) exécuté sur le serveur web. En d’autres termes, PHP peut non seulement écrire des pages Web frontales, mais il peut également être utilisé pour écrire des programmes back-end. PHP CLI Shell Scripting s'applique à tous les avantages de PHP, permettant la création de scripts côté serveur ou d'applications système ou même d'applications GUI. Le mode PHP-CLI est pris en charge sous Windows et Linux.
[Avantages]
1) En utilisant plusieurs processus, une fois le processus enfant terminé, le noyau sera responsable du recyclage des ressources
2) En utilisant plusieurs processus, l'enfant ; le processus ne se terminera pas anormalement Provoque la fermeture de l'ensemble du processus Thread et le processus parent a toujours la possibilité de reconstruire le processus Un processus principal résident, uniquement responsable de la distribution des tâches, la logique est plus claire ;
3) Des tâches planifiées peuvent être implémentées et des scripts shell peuvent être écrits en utilisant PHP sous Linux.
Nous utilisons souvent "php -m" sous Linux pour savoir quelles extensions PHP a installées, qui est le mode d'exécution de la ligne de commande PHP ; les étudiants intéressés peuvent saisir "php -h" pour étudier ce mode d'exécution en profondeur ; .
1.4 Mode module
Le mode module est intégré sous la forme du module mod_php5 À l'heure actuelle, la fonction du module mod_php5 est de recevoir. PHP transmis par les requêtes Apache File, traite ces requêtes et renvoie les résultats traités à Apache. Si nous configurons le module PHP
(mod_php5) dans son fichier de configuration avant le démarrage d'Apache, le module PHP enregistre le hook ap_hook_post_config d'apache2 et démarre ce module lorsque Apache commence à accepter les requêtes de fichiers PHP.
En plus de cette méthode de chargement au démarrage, les modules d'Apache peuvent être chargés dynamiquement au moment de l'exécution, ce qui signifie que le serveur peut être étendu sans avoir à recompiler le code source, ni même à l'arrêter du tout. Il suffit d'envoyer le signal HUP ou AP_SIG_GRACEFUL au serveur pour notifier au serveur de recharger le module. Mais avant le chargement dynamique, nous devons compiler le module dans une bibliothèque de liens dynamiques. Le chargement dynamique à ce moment consiste à charger la bibliothèque de liens dynamiques. Le traitement des bibliothèques de liens dynamiques dans Apache est effectué via le module mod_so, donc le module mod_so ne peut pas être chargé dynamiquement, il ne peut être compilé que statiquement dans le noyau d'Apache. Cela signifie qu'il est démarré avec Apache.
Comment Apache charge-t-il les modules ? Prenons comme exemple le module mod_php5 mentionné précédemment. Nous devons d'abord ajouter une ligne au fichier de configuration d'Apache httpd.conf :
LoadModule php5_module modules/mod_php5.so
Ici nous utilisons la commande LoadModule, le premier paramètre de la commande est le module Le nom peut être trouvé dans le code source de l'implémentation du module. La deuxième option est le chemin où se trouve le module. Si vous devez charger un module pendant que le serveur est en cours d'exécution, vous pouvez envoyer le signal HUP ou AP_SIG_GRACEFUL au serveur. Une fois le signal reçu, Apache rechargera le module sans redémarrer le serveur.
Ce mode de fonctionnement est ce que nous utilisons souvent lors de l'utilisation du serveur Apache dans l'environnement Windows. Dans la modularisation (DLL), PHP est démarré et exécuté avec le serveur Web. (C'est une extension d'Apache basée sur CGI pour accélérer l'efficacité opérationnelle de PHP).
1.5 Mode ISAPI
ISAPI (Internet Server Application Program Interface) est un ensemble d'interfaces API pour les services Internet fournis par Microsoft, un ISAPI La DLL peut résider en mémoire après avoir été activée par une demande d'utilisateur et attendre une autre demande d'utilisateur. Plusieurs fonctions de traitement de demande d'utilisateur peuvent également être définies dans une DLL. De plus, l'application DLL ISAPI et le serveur WWW sont dans le même processus. , l'efficacité est nettement supérieure à celle de CGI. (En raison de l'exclusivité de Microsoft, il ne peut fonctionner que dans l'environnement Windows)
PHP est un module Apache Une fois que le serveur Apache a démarré le système, il pré-génère plusieurs copies de processus et réside dans la mémoire. La demande se produit, elle sera traitée immédiatement. Utilisez ces sous-processus de rechange pour le traitement, afin qu'il n'y ait pas de retard causé par la génération de sous-processus. Ces copies du serveur ne se ferment pas immédiatement après le traitement d'une requête HTTP, mais restent sur l'ordinateur en attendant la requête suivante. La réponse aux requêtes du navigateur client est plus rapide et les performances sont plus élevées.
Recommandations associées :
Explication détaillée des quatre modes de fonctionnement PHP
Résumé des modes de fonctionnement PHP
Compréhension approfondie du mode de fonctionnement PHP_Tutoriel 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!