Solutions au long temps d'exécution de la méthode PHP : 1. Définissez le délai d'expiration de la requête de la passerelle Nginx 2. Définissez la limite supérieure du temps d'exécution du script PHP ;
L'environnement d'exploitation de cet article : système windows7, version PHP7.1, ordinateur DELL G3
Comment résoudre le problème de temps d'exécution trop long de la méthode php ?
Solution au problème de 502 Bad Gateway causé par un temps d'exécution trop long de la méthode PHP
Contexte
J'ai récemment rencontré un problème Il y a un morceau de code PHP qui doit impliquer des opérations d'E/S à long terme, et. cette pièce bloquera le thread où se trouve la requête, ce qui entraînera l'expiration du délai de la requête.
Vous pourriez vous demander, qu'est-ce qui est si difficile à ce sujet ? Il suffit d'ouvrir un fil de discussion et de le faire de manière asynchrone, puis vous pouvez mettre à jour le statut. C'est vraiment une bonne solution, mais c'est dommage que tout cet ensemble de code appartienne à quelqu'un d'autre. Si vous souhaitez modifier le code, l'entreprise sera affectée, ma solution est donc de résoudre ce problème en configurant le timeout sans modifier le code autant que possible.
Solution
Parmi les problèmes ci-dessus, le délai d'attente est principalement affecté par deux facteurs :
Paramètre du délai d'expiration de la demande de passerelle Nginx
Paramètre de la limite supérieure du temps d'exécution du script PHP
Nous l'avons configuré dans l'ordre .
Paramètre du délai d'expiration de la demande de passerelle Nginx
Nginx prend en charge des paramètres de délai d'expiration très précis. Les principaux utilisés sont les suivants :
keepalive_timeout
Nginx utilise keepalive_timeout pour spécifier le timeout de KeepAlive. Spécifie la durée maximale pendant laquelle chaque connexion TCP peut être maintenue. La valeur par défaut de Nginx est de 75 secondes. Certains navigateurs ne maintiennent qu'un maximum de 60 secondes, elle peut donc être définie sur 60 secondes.
fastcgi_connect_timeout
Délai d'expiration pour établir la connexion au serveur FastCGI.
fastcgi_send_timeout
Définissez le délai d'attente pour la transmission des requêtes au serveur FastCGI. Définissez le délai d'attente uniquement entre deux opérations d'écriture consécutives, et non pour la totalité du transfert demandé. Si le serveur FastCGI ne reçoit rien dans ce délai, la connexion est fermée.
fastcgi_read_timeout
Délai d'expiration pour la lecture des réponses du serveur FastCGI. Définissez le délai d'attente uniquement entre deux opérations de lecture consécutives, et non pour le transfert de l'intégralité de la réponse. Si le serveur FastCGI ne transmet rien dans ce délai, la connexion est fermée.
Considérant que l'exécution d'un script PHP est plus pertinente pour les trois derniers paramètres. Il suffit donc d'ajouter des paramètres dans le fichier de configuration Nginx du site Web correspondant.
fastcgi_connect_timeout 600s; fastcgi_send_timeout 600s; fastcgi_read_timeout 600s;
Paramètre de la limite supérieure du temps d'exécution du script PHP
Le temps d'exécution du script PHP est principalement affecté par deux configurations :
php.ini 中 max_execution_time 和 max_input_time
L'emplacement par défaut de php.ini est /usr/local/php/etc/
Placez php Ces deux éléments de configuration dans le fichier de configuration .ini sont modifiés jusqu'à la limite supérieure du délai d'attente.
max_execution_time = 600 max_input_time = 600 php-fpm.conf 中 request_terminate_timeout php-fpm.conf 的默认位置在 /usr/local/php/etc/ request_terminate_timeout 也设置为超时时间的上限。 request_terminate_timeout = 600
Une fois la modification terminée, redémarrez Nginx et php-fpm.
service nginx reload /etc/init.d/php-fpm reload
Apprentissage recommandé : "Tutoriel vidéo 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!