Durée maximale d'exécution dépassée
PHP a arrêté un script qui avait été exécuté plus longtemps qu'il n'est permis. La limite a fait son travail; la question est de savoir si le travail appartenait à une requête web.
Fatal error: Maximum execution time of 30 seconds exceeded
Une page qui a besoin de plus de trente secondes a un problème à résoudre; une importation qui a besoin de dix minutes doit courir quelque part un timeout ne s'applique pas.
Les causes les plus probables d’abord.
Parcourez la liste dans l’ordre. Vérifiez chaque cause avant de modifier quoi que ce soit : les correctifs diffèrent et une supposition coûte plus cher qu’une commande.
| Cause | Comment vérifier | Correctif |
|---|---|---|
| Un travail en vrac dans le navigateur | L'échec suit une action que vous avez commencée en wp-admin et s'arrête au même moment écoulé chaque tentative. | Exécutez-le à partir du WP-CLI, où la limite ne s'applique pas, ou dans des morceaux qui enregistrent les progrès et reprennent. |
| Une mise à jour ou une installation sur un lien lent | L'échec se produit pendant le téléchargement plutôt que pendant le traitement, et les paquets plus grands échouent pendant que les petits réussissent. | Augmentez la limite pour le contexte d'administration, ou installez à partir du système de fichiers au lieu de sur HTTP. |
| Un appel lent à l'extérieur dans une page | Une URL front-end ordinaire est affectée et le site dépend d'un service tiers qui a une mauvaise journée. | Convoquez la requête sortante avec son propre timeout et cachez le résultat, plutôt que d'élever la limite de script autour. |
| La limite s'applique lorsque vous ne vous y attendiez pas | La valeur diffère entre la CLI, la requête web et cron - chaque contexte peut porter une autre. | Changez-le là où le travail fonctionne réellement. Une limite de web augmentée ne fait rien pour un travail exécuté sous cron. |
| Une boucle infinie | Le temps est passé sans réseau et sans activité de base de données, et le même chemin de code se répète dans un profileur. | Fixer la boucle. L'augmentation de la limite ici signifie seulement que le site est bloqué pour plus longtemps avant qu'il abandonne. |
Corriger l’erreur, étape par étape.
Les commandes supposent un accès à WP-CLI et au terminal. Si vous n’en disposez pas, chaque étape explique comment procéder depuis le tableau de bord ou via SFTP.
Pour savoir quelle limite s'applique
La ligne de commande et la requête web ne partagent généralement pas de valeur.
php -i | grep max_execution_time php -r 'echo ini_get("max_execution_time"), PHP_EOL;'Déplacer le travail vers un endroit où la limite ne s'applique pas
WP-CLI fonctionne sans horloge murale au-dessus, c'est pourquoi de longs travaux y appartiennent.
wp plugin install some-plugin --activate
Si elle doit courir dans une requête, n'en soulevez que pour ce chemin
Portée au contexte administratif plutôt qu'à tout ce que le site sert.
wp config set WP_MEMORY_LIMIT '256M'
Vérifiez si le temps va partir
Si le script attend le serveur de quelqu'un d'autre, la limite n'est pas la chose à changer.
wp eval 'var_dump( wp_remote_get( "https://example.com", [ "timeout" => 5 ] ) );'
Confirmez qu'il se termine maintenant
Faites le même travail et regardez-le complet plutôt que de supposer qu'il le fera.
time wp cron event run --due-now
Ce que la plateforme prend en charge.
Les limites d'exécution sont levées pour les contextes admin et cron et laissés là où ils appartiennent pour les requêtes web, de sorte qu'une importation a de la place pour terminer sans permettre également une page publique à exécuter pendant des minutes. WP-CLI est disponible sur chaque plan pour les tâches qui n'auraient jamais dû être dans un onglet de navigateur, et le travail programmé fonctionne sur un vrai calendrierr plutôt que dans la charge de page de quelqu'un.
Questions fréquentes.
Pourquoi la limite est de trente secondes ?
La limite s'applique-t-elle au WP-CLI?
Je l'ai soulevé et le travail échoue toujours au même moment.
Est-ce le même qu'un 504 ?
Si le problème vient d’ailleurs.
Ces erreurs peuvent se présenter de façon similaire dans le navigateur.