Maison titres Explication détaillée des cinq modes de fonctionnement PHP courants

Explication détaillée des cinq modes de fonctionnement PHP courants

Jan 06, 2020 pm 05:57 PM
php

Explication détaillée des cinq modes de fonctionnement PHP courants

À propos des cinq modes de fonctionnement courants de PHP :

1) CGI (Common Gateway Interface)

2) FastCGI (CGI résident/CGI longue durée)

3) CLI (exécution de ligne de commande/interface de ligne de commande)

4) Mode module Web (serveurs Web tels que le mode d'exécution Apache)

5) ISAPI (Internet Server Application Program Interface)

Remarque : Après PHP5.3, PHP n'a plus de mode ISAPI, et il n'y a plus de php5isapi.dll après l'installation de ce fichier. 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 de passerelle commune. C'est un programme En termes simples, CGI est comme un pont qui relie les pages Web aux connectés. le programme d'exécution dans le 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 est extrêmement multiplateforme 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. Il s'agit du Fork-And-Execute. mode. 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 (tel qu'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, qu'elle a 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 deviendra un énorme. charge du serveur. , 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 longue durée, qui peut toujours pendant l'exécution, aussi longtemps. comme 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 de communication évolutive et à haut débit 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. 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 ; , Démarrez plusieurs processus interpréteurs CGI (visibles plusieurs php-cgi.exe ou php-cig) et attendez les connexions du serveur Web

3) Lorsque la requête du client atteint le serveur Web, le gestionnaire de processus FastCGI sélectionne et connectez-vous à un interpréteur 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 ferme 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) Du point de vue de la stabilité, 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é, 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. comme des images.

【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, c'est l'interface sur laquelle PHP peut s'exécuter. la ligne de commande. Différent 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 ou de systèmes côté serveur ou même avec des 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 ; , le processus enfant sera anormal. La sortie n'entraînera pas la fermeture du processus entier et le processus parent aura toujours la possibilité de reconstruire le processus

3) Un processus principal résident est uniquement responsable de la distribution des tâches ; , et la logique est plus claire.

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 les requêtes de fichiers PHP. transmis par Apache. Et traitez ces requêtes, puis renvoyez 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 PHP.


En plus de cette méthode de chargement au démarrage, les modules 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, voire pas du tout. pour arrêter le serveur. 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
Copier après la connexion

Ici, nous utilisons la commande LoadModule. Le premier paramètre de la commande est le nom du module. Le nom peut être implémenté. dans le module. Trouvé dans le code source. 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).


Mode ISAPI 1.5

ISAPI (Internet Server Application Program Interface) est un ensemble d'interfaces API pour les services Internet fournis par Microsoft. Une DLL ISAPI peut résider en mémoire après avoir été activée par une demande d'utilisateur, en attente d'une autre demande d'utilisateur, et peut également être utilisée. Dans Plusieurs fonctions de traitement des demandes des utilisateurs sont configurées dans une seule DLL. De plus, l'application ISAPI DLL et le serveur WWW sont dans le même processus et 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 démarre le système, il pré-génère plusieurs copies de processus et réside dans la mémoire. Une fois qu'une requête se produit, ces sous-processus inactifs sont immédiatement utilisés pour le traitement, de sorte qu'il n'y a aucun 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.

Site Web PHP chinois, il existe de nombreux tutoriels d'introduction PHP gratuits, tout le monde est invité à apprendre !

Cet article est reproduit à partir de : https://www.jianshu.com/p/e9eef6dc7d67

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

7 fonctions PHP que je regrette de ne pas connaître auparavant 7 fonctions PHP que je regrette de ne pas connaître auparavant Nov 13, 2024 am 09:42 AM

Si vous êtes un développeur PHP expérimenté, vous aurez peut-être le sentiment d'y être déjà allé et de l'avoir déjà fait. Vous avez développé un nombre important d'applications, débogué des millions de lignes de code et peaufiné de nombreux scripts pour réaliser des opérations.

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Apr 05, 2025 am 12:04 AM

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

Comment analysez-vous et traitez-vous HTML / XML dans PHP? Comment analysez-vous et traitez-vous HTML / XML dans PHP? Feb 07, 2025 am 11:57 AM

Ce tutoriel montre comment traiter efficacement les documents XML à l'aide de PHP. XML (Language de balisage extensible) est un langage de balisage basé sur le texte polyvalent conçu à la fois pour la lisibilité humaine et l'analyse de la machine. Il est couramment utilisé pour le stockage de données et

Programme PHP pour compter les voyelles dans une chaîne Programme PHP pour compter les voyelles dans une chaîne Feb 07, 2025 pm 12:12 PM

Une chaîne est une séquence de caractères, y compris des lettres, des nombres et des symboles. Ce tutoriel apprendra à calculer le nombre de voyelles dans une chaîne donnée en PHP en utilisant différentes méthodes. Les voyelles en anglais sont a, e, i, o, u, et elles peuvent être en majuscules ou en minuscules. Qu'est-ce qu'une voyelle? Les voyelles sont des caractères alphabétiques qui représentent une prononciation spécifique. Il y a cinq voyelles en anglais, y compris les majuscules et les minuscules: a, e, i, o, u Exemple 1 Entrée: String = "TutorialSpoint" Sortie: 6 expliquer Les voyelles dans la chaîne "TutorialSpoint" sont u, o, i, a, o, i. Il y a 6 yuans au total

Expliquez la liaison statique tardive en PHP (statique: :). Expliquez la liaison statique tardive en PHP (statique: :). Apr 03, 2025 am 12:04 AM

Liaison statique (statique: :) ​​implémente la liaison statique tardive (LSB) dans PHP, permettant à des classes d'appel d'être référencées dans des contextes statiques plutôt que de définir des classes. 1) Le processus d'analyse est effectué au moment de l'exécution, 2) Recherchez la classe d'appel dans la relation de succession, 3) il peut apporter des frais généraux de performance.

Quelles sont les méthodes PHP Magic (__construct, __ destruct, __ call, __get, __set, etc.) et fournir des cas d'utilisation? Quelles sont les méthodes PHP Magic (__construct, __ destruct, __ call, __get, __set, etc.) et fournir des cas d'utilisation? Apr 03, 2025 am 12:03 AM

Quelles sont les méthodes magiques de PHP? Les méthodes magiques de PHP incluent: 1. \ _ \ _ Construct, utilisé pour initialiser les objets; 2. \ _ \ _ Destruct, utilisé pour nettoyer les ressources; 3. \ _ \ _ Appel, gérer les appels de méthode inexistants; 4. \ _ \ _ GET, Implémentez l'accès à l'attribut dynamique; 5. \ _ \ _ SET, Implémentez les paramètres d'attribut dynamique. Ces méthodes sont automatiquement appelées dans certaines situations, améliorant la flexibilité et l'efficacité du code.