Ensemble max_execution_time en PHP CLI
Je sais que PHP CLI est généralement utilisé en raison de aucun des limites de temps et de primaire car il n'est pas à l'aide d'Apache threads/processus.
Mais est-il une façon de définir explicitement le max_execution_time pour certains scripts que je ne veux pas avoir la liberté de la "durée illimitée" et vous voulez juste pour garder ceux script sous contrôle?
Si vous pensez que cette question peut être mieux de répondre sur superuser.com et avoir l'autorisation de le déplacer, de le faire. 🙂
Modifier: j'ai cherché sur Google un peu et trouve le bon paramètre:
php -d max_execution_time=5 script.php
- Après avoir lu toutes les réponses, je veux juste ajouter qu'il n'est pas possible de définir
max_execution_time
dans les fichiers ini (php.ini
,php-cli.ini
, etc.) pour changer l'effet lors de l'exécution de script CLI. Ce comportement est décrit ici: php.net/manual/en/features.commandline.differences.php
Vous devez vous connecter pour publier un commentaire.
La la documentation dit que lors de l'exécution en mode ligne de commande, la valeur par défaut est 0 (illimité). Cela ne veut pas dire que vous ne pouvez pas le remplacer:
Edit: je l'ai juste essayé moi-même, et il fonctionne comme prévu.
php.ini
il énonce que "la Présente directive est fixée à 0 pour le CLI SAPI", ce qui suggère qu'il ne peut pas être mis de pas de délai d'attente.set_time_limit() les travaux de la CLI de scripts.
Après une seconde revient avec le message d'erreur suivant:
J'ai d'abord essayé avec sleep() et la limite de temps n'est pas appliquée. Comme @Jon a suggéré, à l'aide d'un calcul réel, comme une boucle infinie œuvres.
J'ai trouvé ce commentaire intéressant dans le sleep() page PHP:
Remarque: La fonction set_time_limit() et la directive de configuration max_execution_time affectent uniquement le temps d'exécution du script lui-même. Le temps passé sur l'activité qui se passe en dehors de l'exécution du script tels que le système des appels à l'aide de system(), sleep() fonction de requêtes de base de données, etc. n'est pas inclus lors de la détermination de la durée maximale pendant laquelle le script a été en cours d'exécution
sleep
. Essayezfor(;;) ;
à la place.Utilisation set_time_limit fonction.
J'ai un problème similaire. Mais dans mon cas, j'ai eu à distance de la base de données des appels de prendre beaucoup de temps et je voulais terminer le script après un certain laps de temps. Comme indiqué dans les autres réponses, les appels externes (ou
sleep()
) n'est pas pris en compte dans la configuration du paramètre de délai d'attente.Donc, mon approche a été de comprendre les scripts pid, puis d'arrière-plan d'un
kill -9
de commande après un sommeil. Voici un exemple de base:Notez qu'il est possible que votre script se termine bien, et un nouveau, différent on commence avec le même pid cette commande kill prendrait fin. C'est peu probable, mais vous devriez considérer cela comme une possibilité, si vous utilisez cette approche.