Ce n'est pas une exception, c'est une erreur. Il existe des différences importantes entre les exceptions et les erreurs. Tout d'abord, les erreurs ne peuvent pas être attrapées avec la sémantique try/catch.
Les scripts de PHP sont construits autour d'un paradigme de temps d'exécution courts, donc PHP est configuré par défaut pour supposer que si un scripts a été exécuté pendant plus de 30 secondes, il doit être pris dans une boucle infinie et doit donc être terminé. Ceci afin d'éviter qu'un scripts PHP errant ne provoque un déni de service, que ce soit par accident ou par intention malveillante.
Cependant, les scripts ont parfois besoin de plus de temps d'exécution que celui qui leur est alloué par défaut.
Vous pouvez essayer de modifier le temps d'exécution maximal, soit en utilisant le bouton set_time_limit()
ou en modifiant la valeur de max_execution_time
dans le php.ini
pour augmenter la limite. Vous pouvez également supprimer complètement la limite en fixant le temps d'exécution à 0, bien que cela ne soit pas recommandé.
set_time_limit()
peuvent être désactivés par des mécanismes tels que disable_functions
donc il pourrait ne pas être disponible pour vous, de même vous pourriez ne pas avoir accès à php.ini
. Si c'est le cas, vous devez contacter votre hôte pour obtenir de l'aide.
Une exception : les scripts PHP exécutés à partir de l'interface de l'utilisateur. ligne de commande . Dans ces conditions d'exécution, les scripts de PHP peuvent être interactifs et doivent passer un long moment à traiter des données ou à attendre des entrées. Pour cette raison, il n'y a pas de max_execution_time
limite sur les scripts exécutés à partir de la ligne de commande par défaut.
ED EDIT TO ADD : La gestion des erreurs de PHP 7 a été profondément remaniée. Je crois que les erreurs et les exceptions sont maintenant toutes deux des sous-classes de Throwable. Cela peut rendre ce qui précède non pertinent pour PHP7+, bien que je doive regarder de plus près les spécificités de la gestion des erreurs pour en être sûr.
1 votes
Je crois qu'une fois le temps d'exécution dépassé, le script est terminé. Dans ce cas, le script qui aurait pu attraper l'exception a déjà été tué.
0 votes
Les erreurs fatales ne peuvent pas être attrapées (ce ne sont pas des exceptions) ou traitées. Vous pouvez seulement gérer la fin de script de manière gracieuse en enregistrement d'une fonction d'arrêt mais le script se terminera après.
0 votes
Duplicata possible de Comment attraper une erreur fatale PHP
0 votes
Non, le duplicata possible n'est pas un duplicata "exact". Il ne demande pas le fatal soulevé par script timeout, mais seulement comment attraper une erreur fatale en général. Mais comme le général répond aussi au spécifique dans ce cas, il peut être considéré comme un doublon possible. Si la question est de savoir comment résoudre une erreur de script timeout, alors il s'agit d'un doublon possible de la plupart des questions suivantes stackoverflow.com/search?q=maximum+execution+time+php ;)
0 votes
Je ne peux pas répondre à cette question de manière générale, mais dans certaines situations, vous pouvez limiter le temps d'exécution d'un élément à une durée inférieure au temps d'exécution maximal, puis le rattraper. Par exemple, curl_setopt($client, CURLOPT_TIMEOUT, 27) ; fera en sorte que curl abandonne après 27 secondes, afin d'éviter de déclencher l'erreur fatale.