Position actuelle: Accueil> Derniers articles> [Le script est toujours chronométré après avoir appelé la fonction set_time_limit. Quelles sont les raisons et les solutions courantes?

[Le script est toujours chronométré après avoir appelé la fonction set_time_limit. Quelles sont les raisons et les solutions courantes?

gitbox 2025-06-22

1. Paramètres max_execution_time dans le fichier de configuration PHP

L'élément de configuration max_execution_time de PHP contrôle le temps d'exécution maximum du script. Même si vous appelez set_time_limit dans le script, si l'élément de configuration définit une valeur inférieure dans le fichier php.ini, il limitera toujours le temps d'exécution du script. L'appel à set_time_limit modifie temporairement le temps d'exécution maximal du script actuel, mais si la valeur max_execution_time dans php.ini est inférieure au moment d'exécution que vous souhaitez, le script sera toujours terminé.

Solution:

Vérifiez et modifiez le paramètre MAX_EXECUTUTION_TRE dans Php.ini. Si vous souhaitez faire fonctionner le script plus long, vous pouvez augmenter sa valeur. Vous pouvez utiliser la commande suivante pour trouver la configuration actuelle de max_execution_time :

 <span><span><span class="hljs-title function_ invoke__">phpinfo</span></span><span>();
</span></span>

Ensuite, modifiez la configuration correspondante dans le fichier php.ini :

 <span><span><span class="hljs-attr">max_execution_time</span></span><span> = </span><span><span class="hljs-number">300</span></span><span>  </span><span><span class="hljs-comment">; Se présenter comme300Deuxième(5minute)</span></span><span>
</span></span>

Après modification, vous devez redémarrer le serveur Web (tel qu'Apache ou Nginx) pour rendre la configuration.


2. Paramètres d'expiration du serveur Web

En plus de la configuration PHP, les serveurs Web (tels qu'Apache, Nginx, etc.) peuvent également définir des limites de délai de demande, ce qui entraînera également des délais d'exécution de script. Par exemple, la directive TimeOut d'Apache ou le paramètre Proxy_Read_Timeout de NGINX peut limiter le temps d'exécution des scripts PHP.

Solution:

Vérifiez et ajustez les paramètres d'expiration pertinents en fonction du serveur Web que vous utilisez.

  • Apache : trouver et modifier les éléments de configuration du délai d'expiration :

 <span>Timeout 300
</span>
  • Nginx : ajouter ou modifier les paramètres proxy_read_timeout ou fastcgi_read_timeout dans le fichier nginx.conf :

 <span><span><span class="hljs-attribute">proxy_read_timeout</span></span><span> </span><span><span class="hljs-number">300</span></span><span>;
</span><span><span class="hljs-attribute">fastcgi_read_timeout</span></span><span> </span><span><span class="hljs-number">300</span></span><span>;
</span></span>

Après modification, redémarrez le serveur pour que les paramètres prennent effet.


3. Fonctionnement de blocage à long terme à l'intérieur du script

Certains scripts PHP peuvent bloquer longtemps pendant certaines opérations, telles que les requêtes de base de données, les demandes d'API distantes, etc. Même si set_time_limit modifie le temps d'exécution maximal, le blocage de ces opérations lui-même peut entraîner un délai d'exécution du script.

Solution:

  • Optimisez les requêtes de base de données pour vous assurer qu'elles peuvent être complétées dans un délai raisonnable et éviter le verrouillage inutile.

  • Utilisez des demandes asynchrones ou du traitement par lots pour éviter le blocage à long terme. Par exemple, une requête API ou une requête de base de données peut être divisée en plusieurs petites demandes, avec un temps de traitement plus court par demande.


4. Interférence entre les demandes multithread ou simultanées

S'il existe des opérations impliquant des demandes simultanées ou plusieurs threads dans les scripts PHP, la limite de temps pour un seul thread peut être dépassée lors du traitement de plusieurs tâches. Bien que set_time_limit puisse ajuster le temps d'exécution d'un seul processus, en concurrence, les paramètres de délai d'expiration de plusieurs processus doivent être ajustés de manière synchrone.

Solution:

Envisagez d'utiliser un système de file d'attente (comme RabbitMQ, Redis, etc.) pour gérer les tâches simultanées. Un seul temps mort de processus est évité en divisant la tâche en plusieurs petites sous-tâches et en traitement de manière asynchrone.


5. La portée de l'action de set_time_limit

set_time_limit n'est valable que pour le script actuel, il n'affecte pas la limite de délai d'expiration des demandes externes ou d'autres scripts pour PHP. Si le script contient inclure ou nécessite des fichiers à l'intérieur, set_time_limit peut ne pas être en mesure d'étendre le temps d'exécution du code dans ces fichiers.

Solution:

Assurez-vous que set_time_limit est appelé au début du script, ou set_time_limit est appelé dans chaque fichier inclus. Si vous souhaitez rendre tous les fichiers affectés, envisagez d'appeler set_time_limit dans le fichier d'entrée (comme index.php).


6. Limitations de ressources au niveau du système

Dans certains environnements (tels que l'hébergement partagé ou certains fournisseurs de services cloud), le temps d'exécution des scripts PHP peut être soumis à des restrictions au niveau du système d'exploitation, qui ne peuvent pas nécessairement être modifiées grâce à la configuration de PHP. Par exemple, certains systèmes d'exploitation ou environnements conteneurisés peuvent résilier les scripts lorsque l'utilisation des ressources est trop élevée.

Solution:

Vérifiez les restrictions au niveau du système d'exploitation du serveur, telles que la commande ulimit , pour vous assurer que le système ne limite pas l'heure d'exécution du processus. S'il ne peut pas être modifié, envisagez de migrer vers un environnement plus sans ressources, comme un serveur autonome ou un hôte cloud dédié.


7. Autres restrictions tierces

Certains services ou composants tiers peuvent limiter le temps d'exécution des scripts, en particulier lors de l'utilisation d'API externes ou de services intégrés. Par exemple, certaines API peuvent renvoyer une erreur après la mise en œuvre de la demande, provoquant la fin du script.

Solution:

  • Consultez la documentation des services tiers pour voir s'ils ont des paramètres de délai d'attente.

  • Utilisez les mécanismes de gestion des erreurs appropriés dans les scripts pour attraper et gérer les exceptions de délai d'expiration.