Allonger la durée d’exécution d’un script php

Comment allonger la durée d’exécution d’un script PHP?

 

Il est souvent frustrant lorsqu’on débute en PHP d’avoir une erreur 500 suite à un script qui met du temps à s’exécuter.

Dans la littérature PHP, vous avez la fonction set_time_limit(int $secondes), qui permet d’aller au-delà de la valeur par défaut de 30 secondes. Mais il y a une exception, si votre installation PHP est en safe mode, ça ne marche pas. On vous recommande d’aller dans le fichier php.ini pour configurer la variable d’environnement max_execution_time.

Mais pour des raisons de configuration, il se peut que même cela ne marche pas. Il faut aller encore plus bas au niveau d’Apache, et triturer une autre variable d’environnement.

Configurer Apache si vous avez accès au fichier de configuration

Si dans les logs Apache vous avez le message  suivant :

mod_fcgid: read data timeout in 31 seconds

 

lisez ce qui suit si vous êtes sous Webmin mais à transposer pour d’autres panels:

Sous Webmin > Servers > Apache Webserver > Global configuration > Edit Config File

Il faut aller dans le fichier de configuration d’Apache et trouver la ligne qui contient :

IPCCommTimeout

au lieu de laisser la valeur par défaut à 31 passez la à 100 pour éviter des erreurs 500, dû à un dépassement des 31 secondes.

 

Pourquoi je vous dis ça? c’est parce que en googlant ce topic j’ai jamais réussi en runtime à lever cette limite, cette méthode est sûre.

Cette directive se trouve dans le le fichier de configuration Apache global ou sur chaque Vhost.

Mais devez vous toucher à cette varaible?

Il est des CMS ou l’on n’a pas envie de voir comment c’est fait, donc oui on va toucher à al configuration. Mais si vous êtes un peu plus aguerris, je vous propose en recvanche d’exévcuter vos script php en ligne de commande !

Exécuter un script php en ligne de commande

Si vous êtes sous Linux, vous pouvez exécuter n’importe quel script php de cette façon :

$ php monscript.php

En mode ligne de commande, (CLI : command line interface), vous n’avez pas de limite de durée comme en mode web. Pourquoi? parce qu’en mode web, vous avez une contrainte, en effet les internautes ne doivent pas poireauter devant votre site web, et il est donc considéré comme anormal que des scripts mettent des minute à s’exécuter.

Retour en haut