Maison  >  Article  >  développement back-end  >  Processus d'exécution PHP et concepts associés

Processus d'exécution PHP et concepts associés

不言
不言original
2018-07-06 13:48:291648parcourir

Cet article présente principalement le processus d'exécution et les concepts associés de PHP. Il a une certaine valeur de référence. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent s'y référer

Architecture du programme

. Voyons d'abord quel support est nécessaire pour exécuter un programme PHP. Le point de départ de tout est qu'il est logique de commencer à écrire du PHP à partir de programmeurs, donc des fichiers de script PHP au niveau de l'application (y compris divers codes PHP tiers dans Composer/include) sont nécessaires. Les fichiers de script doivent être analysés et compilés avant de pouvoir être exécutés, donc une machine virtuelle PHP (généralement un moteur Zend) est également nécessaire. De plus, les scripts PHP utiliseront des fonctions et des classes dans plusieurs extensions, donc les extensions (y compris les extensions officielles, PECL et écrites par l'utilisateur) sont presque nécessaires. De plus, les programmes PHP doivent interagir avec l'extérieur (comme obtenir des paramètres à partir de la ligne de commande et obtenir des informations de demande auprès du serveur Web). Cette couche est responsable de SAPI, donc SAPI est également nécessaire.

Pour résumer ce qui précède, l'architecture du programme PHP comporte quatre couches de haut en bas, à savoir : la couche application, la couche SAPI, la couche d'extension et le moteur Zend. La relation architecturale est illustrée dans la figure ci-dessous :

Processus dexécution PHP et concepts associés

(Source de l'image : http://www.nowamagic.net/libr...)

La couche SAPI possède une certaine capacité. Certaines personnes peuvent être relativement inconnues. SAPI fournit un ensemble unifié d'interfaces pour dissocier les applications de couche supérieure de l'environnement d'exploitation réel. Les fichiers PHP écrits par les utilisateurs peuvent être exécutés à l'aide de la ligne de commande ou dans Apache httpd ou FPM. Le travail de support derrière est fourni par SAPI et les développeurs l’ignorent. Grâce à SAPI, la couche de script PHP n'a pas besoin de trop prendre en compte l'environnement d'exécution spécifique, et PHP lui-même peut permettre à SAPI de fournir des implémentations uniques basées sur ses propres caractéristiques.

Processus d'exécution

Mis à part les différences entre les différentes implémentations SAPI, le processus d'exécution du programme PHP peut être simplement résumé comme suit :

  1. Programme démarrages, initialisation du moteur Zend et des composants principaux ;

  2. Initialisation de l'extension (MINIT)

  3. Demande reçue, activation de l'extension (RINIT) ; >

  4. Analyser et exécuter des scripts PHP

  5. La requête se termine et l'extension est désactivée (RSHUTDOWN) ; 🎜>Désinstallez l'extension ( MSHUTDOWN);

  6. Arrêt du programme

  7. Sauf 345, les étapes restantes ne seront exécutées qu'une seule fois dans l'ensemble du SAPI cycle de vie. En mode CGI/CLI, 345 n'est exécuté qu'une seule fois.

    Comprendre le cycle de vie des programmes PHP est un processus essentiel pour l'avancement de PHP et peut également aider les développeurs à localiser rapidement les problèmes. Par exemple, si le script signale que la fonction n'existe pas, il est très probable qu'une extension manque ou qu'il y ait une erreur de chargement en mode CLI/CGI, peu importe comment
  8. c'est en vain, la ressource le fera ; être libéré dès que le script est exécuté ;
se termine L'exécution du script ne signifie pas nécessairement la fin du processus ; une fois le script compilé, il réside dans la mémoire et n'exécutera pas RINIT et RSHUTDOWN à plusieurs reprises, ce qui est un point d'amélioration des performances du framework CLI par rapport aux autres modes de fonctionnement, etc.

Pour plus de détails sur chaque étape du cycle de vie de SAPI, veuillez vous référer au livre "Compréhension approfondie du noyau PHP".

pconnectCGI, FastCGI, PHP-FPM, etc.exit/die

CGI/FastCGI/php-cgi et PHP-FPM sont plusieurs concepts qui peuvent facilement dérouter et dérouter les développeurs PHP. La relation entre ces concepts est la suivante :

Seuls quelques concepts sont relativement faciles à distinguer. En fait, ce qui déroute les développeurs, c'est la combinaison des quatre groupes de concepts suivants :

serveur web. Apache httpd et Nginx communs
CGI/FastCGI:网关协议,与语言无关,所以与PHP关系也不大。两者的区别是FastCGI可以独立于web服务器,运行FastCGI协议的程序变成web服务器的内容提供方(上游)。另外与web服务器解耦后,用FastCGI协议交互的进程具有性能好、安全稳定、支持分布式等优点;

php-cgi:实现FastCGI协议的PHP解析器,不能平滑重启和热加载;

FPM:PHP官方的FastCGI进程管理器,可执行程序为php-fpm;支持平滑重启、热加载,运行稳定;其管理对象不是php-cgi进程,两者没什么关系。

    SAPI. Les plus courants sont les protocoles apache2handler, cli, fpm-fcgi ; Programme CGI et FastCGI mentionnés dans l'article ; À savoir php-cgi et php-fpm.
  1. Le serveur Web étant plus familier à la plupart des gens, parlons de sa relation avec d'autres concepts : lors de l'utilisation d'Apache httpd, plus de 90 % du temps, les scripts PHP sont exécutés dans de manière module, donc cela est lié à apache2handler dans SAPI et n'a rien à voir avec d'autres concepts (ni protocole CGI ni FastCGI), lors de l'utilisation de Nginx, 90% du temps la requête est transmise à FPM via le protocole FastCGI, donc c'est le cas. liés à fpm-fcgi dans SAPI et les protocoles FastCGI et php-fpm dans le programme sont liés aux trois concepts et n'ont rien à voir avec d'autres concepts.
  2. Résumé

  3. Cet article passe brièvement en revue l'architecture et le processus d'exécution des programmes PHP et introduit plusieurs concepts facilement confus.
  4. Merci d'avoir lu, toute correction est la bienvenue !

  5. Ce qui précède représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'étude de chacun. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !
  6. Recommandations associées :

Analyse du processus d'exécution de Pimple du conteneur PHP

Avantages de l'utilisation du conteneur de services Laravel

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:
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