PHP s’exécute plus longtemps que max_execution_time … parfois

J’ai une classe PHP, une fois appelée, définit la limite de temps à 60 secondes. La seule particularité de cette classe est qu’elle utilise curl_multi_exec ().

set_time_limit(60); ini_set('max_execution_time', 60); 

Le problème est que sous la page / server-status d’Apache, cette page et une autre qui utilise une boucle de thread unique passent après leur max_execution_time et atteignent parfois 200 secondes!

Qu’est-ce que je rate? Existe-t-il un moyen de configurer Apache pour mettre fin à des scripts (ou même des connexions) fonctionnant plus de 90 secondes?

A partir du manuel :

La set_time_limit() et la directive de configuration max_execution_time que le temps d’exécution du script lui-même. Le temps passé sur l’activité en dehors de l’exécution du script, comme les appels système utilisant system() , les opérations de stream, les requêtes de firebase database, etc., n’est pas pris en compte pour déterminer la durée maximale d’exécution du script.

Comme les demandes de courbure entrent dans cette catégorie, le temps passé à attendre une demande pour terminer ne sera pas pris en compte. Vous devez définir le paramètre curl CURLOPT_TIMEOUT sur une valeur inférieure ou surveiller le temps passé à exécuter votre script vous-même.

Aha! Lorsque vous définissez cette configuration, le téléscripteur se réinitialise, exemple:

 sleep(10); set_time_limit(20); sleep(10); set_time_limit(5); sleep(10); // dies after 5 seconds 

Le temps total est d’environ 30 secondes.

En ce qui concerne curl_exec_multi , vous pouvez définir l’option de délai d’attente CURL au lieu de PHP. Cela dépend de qui préférerait mourir à votre avis – la connexion en boucle, ou la demande complète.