Maison >développement back-end >tutoriel php >Compréhension des méthodes de débordement de mémoire PHP, de ligne de commande et d'exécution de services Web
Cet article présente principalement la compréhension des deux méthodes d'exécution du débordement de mémoire PHP, de la ligne de commande et du service Web. Il a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer
Pendant le processus de développement, en raison d'une quantité excessive de données lues dans la base de données, une certaine interface a renvoyé un statut de 200 mais aucune donnée de réponse. Le journal des erreurs PHP contenait les informations suivantes : Erreur fatale PHP : taille de mémoire autorisée de 134217728 octets. épuisé. Évidemment, il s'agit d'une erreur causée par un débordement de mémoire (Out Of Memory), mais ce qui me laisse perplexe, c'est qu'il n'y a aucune sortie dans le journal d'activité (application.log) du framework Yii, et il n'y a pas de sortie. Stack Trace sur la page message d'erreur, nous avons donc retracé la cause. Les raisons sont les suivantes. Regardons d'abord le code principal du fichier CApplication.php du framework Yii :public function run() { if($this->hasEventHandler('onBeginRequest')) $this->onBeginRequest(new CEvent($this)); register_shutdown_function(array($this,'end'),0,false); $this->processRequest(); if($this->hasEventHandler('onEndRequest')) $this->onEndRequest(new CEvent($this)); }utilisé
avant de traiter la demande d'enregistrement du rappel lorsque la terminaison anormale se produit. Normalement, PHP Lorsqu'un script anormal se termine, la méthode register_shutdown_function
sera rappelée. Vous pouvez utiliser end()
dans l'écouteur de l'événement onEndRequest
pour obtenir cette erreur. error_get_last()
ne fonctionnera pas et, naturellement, il n'y aura pas de processus de journalisation ultérieur, d'affichage de page d'erreur, etc. register_shutdown_function
Ci-joint la relation d'appel du serveur Web, PHP-FPM et du script PHP :
La requête entre d'abord dans le serveur Web (tel que Nginx), et Nginx distribue la requête (selon la configuration du nœud de serveur, du nœud d'emplacement, etc.) :, etc., accède au fichier de script PHP spécifié en fonction des informations de la demande, puis utilise l'implémentation de l'interpréteur PHP. $_GET/$_POST
(Ma compréhension est : équivalent à PHP-FPM démarrant l'interpréteur PHP, un peu comme exécuter la commande
) php -f script.php
fastcgi_param SCRIPT_FILENAME /home/dev_user/www/xxx/webroot/index.php;Si vous ne spécifiez pas de fichier PHP, la configuration par défaut sera. utilisé et le répertoire racine sera essayé sous. Le programme-cadre sera démarré dans index.php, et le framework trouvera le contrôleur et l'action correspondants pour compléter la logique métier réelle.
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!