Maison  >  Article  >  développement back-end  >  Explication détaillée du mode de fonctionnement de php sur le serveur web

Explication détaillée du mode de fonctionnement de php sur le serveur web

不言
不言avant
2018-10-24 17:34:492556parcourir

Cet article vous apporte une explication détaillée du mode de fonctionnement de PHP sur le serveur web. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. .

CGI Common Gateway Interface (Common Gateway Interface)

CGI est la Common Gateway Interface (Common Gateway Interface), 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. Image de synthèse Les performances multiplateformes sont excellentes et peuvent être implémentées sur presque tous les systèmes d'exploitation. CGI est déjà un modèle plus ancien et a été rarement utilisé ces dernières années.

Chaque fois qu'il y a une demande 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. C'est le 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 (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, 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. Cela devient un énorme fardeau pour le serveur. Imaginez simplement que des centaines de requêtes simultanées amènent le serveur à bifurquer des centaines de processus. C'est pourquoi cgi a toujours été connu pour ses faibles performances et sa consommation élevée de ressources.

fast-cgi (longue vie CGI)

Une variante du mode cgi, c'est-à-dire (cgi est normal Les gens, fast-cgi ce sont les forces spéciales)

FastCGI est comme un CGI de longue durée. Il peut être exécuté à tout moment, tant qu'il est activé, il ne faudra pas de temps pour bifurquer à chaque fois. mode fork-and-execute de CGI).

Le principe de fonctionnement de FastCGI est :

  1. Le gestionnaire de processus FastCGI est chargé au démarrage du serveur Web [le gestionnaire de processus FastCGI de PHP est PHP-FPM (php-FastCGI Process Manager)】(IIS ISAPI ou Apache Module);

  2. Le gestionnaire de processus FastCGI s'initialise et démarre plusieurs processus interpréteurs CGI (visibles dans le Gestionnaire des tâches avec plusieurs php-cgi. exe) et attendez une connexion du serveur Web.

  3. Lorsqu'une requête client atteint le serveur Web, le gestionnaire de processus FastCGI sélectionne et se connecte à un interpréteur CGI. Le serveur Web envoie des variables d'environnement CGI et des entrées standard au sous-processus FastCGI php-cgi.

  4. Une fois le sous-processus FastCGI terminé le traitement, il 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, au démarrage du processus. Un bonus supplémentaire est que la connexion persistante à la base de données fonctionne

Interface de ligne de commande cli (interface de ligne de commande)

Tapez php script.php dans le terminal En attente de la ligne de commande

Mode module web (mode module exécuté par des serveurs web tels qu'apache)

Le mode module est intégré sous la forme du module mod_php5. module Il reçoit les requêtes de fichiers PHP transmises par Apache, traite ces requêtes, puis renvoie les résultats traités à Apache. Il s'agit d'une extension d'Apache basée sur CGI pour accélérer l'efficacité opérationnelle de PHP. 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 Apache peuvent être chargés dynamiquement au moment de l'exécution, ce qui signifie que le serveur peut être étendu sans avoir besoin de recompiler le code source, voire sans arrêter du tout 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 ? 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 nom du module. Le nom se trouve dans. le code source de l'implémentation du module trouvé dans . 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 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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer