J'ai trouvé cette idée en me basant sur la réponse de @pinkal-vansia. Donc je ne revendique pas une réponse originale, mais une réponse avec une application pratique. J'avais besoin d'un moyen pour que la page se rafraîchisse elle-même en cas de dépassement de délai. Puisque j'ai observé suffisamment de timeouts de mon script cURL pour savoir que le code fonctionne, mais que parfois, pour une raison quelconque, il ne parvient pas à se connecter au serveur distant, ou à lire complètement le html servi, et que lors du rafraîchissement le problème disparaît, je suis d'accord pour que le script se rafraîchisse lui-même pour "soigner" une erreur de timeout d'exécution maximale.
<?php //script name: scrape_script.php
ini_set('max_execution_time', 300);
register_shutdown_function('shutdown');
function shutdown()
{
?><meta http-equiv="refresh" content="0; url=scrape_script.php"><?php
// just do a meta refresh. Haven't tested with header location, but
// this works fine.
}
Pour information, 300 secondes n'est pas trop long pour le script de scraping que j'exécute, qui prend juste un peu moins que cela pour extraire les données des types de pages que je scrape. Parfois, le temps est dépassé de quelques secondes seulement en raison d'irrégularités de connexion. Sachant que ce sont les temps de connexion qui échouent parfois, plutôt que le traitement du script, il est préférable de ne pas augmenter le timeout, mais plutôt de rafraîchir automatiquement la page et de réessayer.
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.