Dans PHP Development, ini_set ('max_execution_time', 0) est une instruction courante utilisée pour définir le temps d'exécution du script. Son objectif est de permettre l'exécution de scripts sans limite de temps et est généralement utilisé pour effectuer des tâches de longue durée telles que l'importation de données, le traitement de données à grande échelle, etc., de nombreux développeurs rencontreront le problème de ceci: même si INI_SET ('max_execution_time' ', 0) est explicitement utilisé dans le scénario pour définir l'heure d'exécution infinie du script, l'erreur du script se produit toujours. Pourquoi cela se produit-il?
Tout d'abord, nous devons comprendre le rôle de max_execution_time . Cet élément de configuration est utilisé pour définir le temps d'exécution maximum (unité: secondes) des scripts PHP. Par défaut, PHP limite le temps d'exécution maximal du script pour éviter les ressources de serveur exagérées ou écrasantes en raison d'une exécution illimitée. Si le script dépasse ce délai, une erreur de délai d'expiration sera lancée et l'exécution sera arrêtée.
Par exemple, ini_set ('max_execution_time', 0) définira le temps d'exécution maximum sur 0, ce qui signifie que le script n'a pas de limite de temps et peut s'exécuter indéfiniment.
Bien que ini_set ('max_execution_time', 0) devrait théoriquement permettre l'exécution de scripts PHP, dans certains cas, il peut ne pas prendre effet. Voici quelques raisons courantes:
De nombreux serveurs Web, tels qu'Apache ou Nginx, définissent également des limites de délai d'expiration dans les fichiers de configuration. Pour Apache, il s'agit généralement d'une instruction de délai d'expiration , tandis que Nginx possède des paramètres tels que proxy_read_timeout , fastcgi_read_timeout , etc. Si ces paramètres de délai d'expiration au niveau du serveur sont plus stricts que max_execution_time dans PHP, la configuration PHP ne prendra pas effet. Par conséquent, même si PHP définit un temps d'exécution illimité, la limite de délai d'expiration du serveur Web provoque toujours une interruption de script.
Solution : vérifiez la configuration des serveurs Web pour vous assurer que leur délai d'expiration est défini suffisamment longtemps ou désactiver la limite de délai d'expiration.
Si vous exécutez des scripts PHP dans l'interface de ligne de commande (CLI), INI_SET ('max_execution_time', 0) prendra généralement effet parce que la limite de délai d'expiration de la CLI n'est généralement pas aussi stricte que l'environnement Web. Cependant, dans un environnement Web, le paramètre MAX_EXECUTUTION_TRE peut être affecté par la configuration du serveur Web.
Solution : si vous testez dans un environnement Web et que vous ne pouvez pas désactiver le paramètre de délai d'expiration du serveur, vous pouvez essayer de déplacer le script vers l'environnement de la ligne de commande pour exécuter ou ajuster les paramètres du serveur.
Certains modes d'exécution PHP (tels que le mode FPM) peuvent avoir différents comportements de configuration. Dans certains cas, le paramètre MAX_EXECUTION_THILE peut ne pas fonctionner comme prévu, car le FPM peut avoir sa propre configuration de délai d'expiration. Même si le script est illimité sur les paramètres de temps d'exécution dans PHP, les paramètres de délai d'expiration de FPM ou FASTCGI peuvent limiter le temps d'exécution maximal des demandes PHP.
Solution : vérifiez le fichier de configuration de PHP-FPM ou FASTCGI pour vous assurer qu'il n'y a pas de limite de temps ou une limite de délai plus longue est définie.
La fonction set_time_limit () dans PHP est également une fonction qui contrôle le temps d'exécution maximal du script. Semblable à ini_set ('max_execution_time', 0) , il est également utilisé pour définir le temps d'exécution du script. Mais il convient de noter que set_time_limit () est actif dynamiquement, et il réinitialise le temps d'exécution maximal du script à chaque fois qu'il est exécuté. Si l'appel set_time_limit () existe dans le script, il peut écraser le max_execution_time que vous définissez avec ini_set .
Solution : vérifiez si la fonction set_time_limit () est appelée dans le code pour vous assurer qu'elle n'affecte pas les paramètres de max_execution_time .
En plus d'utiliser INI_SET () pour définir max_execution_time dans les scripts, il existe une autre possibilité que cette valeur ait été définie dans le fichier de configuration PHP.ini de PHP et la valeur est définie pour être immuable. Dans certains environnements d'hébergement ou de serveur restreints partagés, le max_execution_time dans le fichier php.ini peut avoir été défini sur une valeur fixe, et généralement la valeur ne peut pas être modifiée par ini_set () .
Solution : si possible, vérifiez et modifiez l'élément de configuration max_execution_time dans le fichier php.ini , ou contactez l'administrateur du serveur pour ajuster ce paramètre.
Certains cadres PHP ou bases de code tiers peuvent avoir des restrictions supplémentaires sur le temps d'exécution, ou des appels set_time_limit () ou d'autres fonctions qui limitent le délai d'expiration en arrière-plan. Dans ce cas, même si vous définissez max_execution_time dans votre code, le framework ou la bibliothèque peut remplacer ce paramètre.
Solution : consultez la documentation du cadre ou de la bibliothèque que vous utilisez pour voir s'il existe des limites de temps d'exécution, et ajustez ou contournez ces limites de manière appropriée.
ini_set ('max_execution_time', 0) permet d'exécuter les scripts PHP sans restrictions, mais dans certains cas, il peut être invalide. Les raisons courantes incluent des restrictions de configuration sur le serveur Web, le mode de fonctionnement de PHP, l'interférence avec les autres fonctions, les restrictions dans les fichiers de configuration PHP et les limitations du cadre ou de la bibliothèque utilisée. Ce problème peut généralement être résolu en examinant et en ajustant ces facteurs.