Définir le temps d'exécution max en PHP CLI

je sais que PHP CLI est habituellement utilisé en raison de aucune limite de temps et primaire parce qu'il n'utilise pas les threads/processus Apache.

Mais y a-t-il une façon de définir explicitement le max_execution_time pour certains scripts que je ne veux pas avoir la liberté de "unlimited time" et que je veux simplement garder le contrôle de ces scripts?

si vous pensez que cette question peut être mieux répondu sur superuser.com et avoir la permission de le déplacer, le faire. :)

Modifier: j'ai cherché un peu sur Google et j'ai trouvé le bon paramètre:

php -d max_execution_time=5 script.php
38
demandé sur Radek Simko 2011-05-03 23:55:48

4 réponses

documentation dit qu'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:

set_time_limit(10); // this way
ini_set('max_execution_time', 10); // or this way

Edit: j'ai essayé moi-même, et ça marche comme prévu.

F:\dev\www>c:php -f index.php
PHP Fatal error:  Maximum execution time of 2 seconds exceeded in F:\dev\www\index.php on line 3

Fatal error: Maximum execution time of 2 seconds exceeded in F:\dev\www\index.php on line 3
32
répondu Jon 2015-04-23 08:12:13

set_time_limit() fonctionne dans les scripts CLI.

<?php 
set_time_limit(1); //in seconds
for (;;);
?>

Après une seconde revient avec le message d'erreur suivant:

PHP Fatal error:  Maximum execution time of 1 second exceeded in \
/home/stivlo/test.php on line 4

au début j'ai essayé avec sleep () et la limite de temps ne s'applique pas. Comme @Jon l'a suggéré, en utilisant un vrai calcul, comme une boucle infinie fonctionne.

j'ai trouvé ce commentaire intéressant dans le sleep () PHP page:

Note: 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. tout temps passé sur une activité qui se produit en dehors de l'exécution du script tel que les appels système utilisant system(), la fonction sleep (), les requêtes de base de données, etc. n'est pas inclus lors de la détermination de la durée maximale d'exécution du script

19
répondu stivlo 2011-05-03 20:11:19

Utiliser set_time_limit fonction.

0
répondu Timofey Stolbov 2011-05-03 20:03:10

j'ai un problème similaire. Mais dans mon cas, j'ai eu des appels de base de données à distance prenant beaucoup de temps et je voulais terminer le script après un certain temps. Comme indiqué dans les autres réponses, les appels externes (ou sleep()) ne compte pas avec le paramètre de temporisation configuré.

donc mon approche a été de trouver les scripts pid, et puis background a kill -9 commande après un sommeil. Voici un exemple de base:

$cmd = "(sleep 10  && kill -9 ".getmypid().") > /dev/null &";
exec($cmd); //issue a command to force kill this process in 10 seconds

$i=0;
while(1){
    echo $i++."\n";
    sleep(1); //simulating a query
}

Notez qu'il est possible que votre le script se termine bien, et un nouveau, différent démarre avec le même pid que cette commande de kill terminerait. Cela est peu probable, mais vous devriez envisager cette possibilité si vous utilisez cette approche.

0
répondu Landon 2017-06-15 18:10:10