Установить max_execution_time в PHP CLI

Я знаю, что PHP CLI обычно используется из-за отсутствия временных ограничений и первичных, поскольку он не использует потоки / процессы Apache.

Но есть ли способ, как явно установить max_execution_time для некоторых скриптов, которые я не хочу иметь свободу «неограниченного времени» и просто хочу, чтобы этот сценарий контролировался?

Если вы считаете, что этот вопрос может быть лучше ответил на superuser.com и иметь разрешение на его перемещение, сделайте это. 🙂

Изменить : я немного искал Google и нашел правильный параметр:

php -d max_execution_time=5 script.php 

Related of "Установить max_execution_time в PHP CLI"

В документации говорится, что при запуске в режиме командной строки значение по умолчанию равно 0 (неограниченно). Он не говорит, что вы не можете переопределить его:

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

Редактирование: я просто попробовал это сам, и он работает так, как ожидалось.

 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 

set_time_limit () работает в сценариях CLI.

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

Через одну секунду возвращается следующее сообщение об ошибке:

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

Первоначально я пробовал с sleep (), и срок не применяется. Как пояснил @Jon, использование реального вычисления, как и бесконечный цикл, работает.

Я нашел этот интересный комментарий на странице сна () PHP:

Примечание. Функция set_time_limit () и директива конфигурации max_execution_time влияют только на время выполнения самого скрипта. Любое время, затрачиваемое на активность, которое происходит вне выполнения сценария, например системные вызовы с использованием system (), функция sleep (), запросы к базе данных и т. Д. Не включается при определении максимального времени выполнения сценария

Используйте функцию set_time_limit .

У меня аналогичная проблема. Но в моем случае у меня были удаленные вызовы базы данных, которые занимали значительное время, и я хотел прекратить выполнение скрипта через определенное время. Как указано в других ответах, внешние вызовы (или sleep() ) не учитывают настроенную настройку таймаута.

Поэтому мой подход состоял в том, чтобы выяснить скрипты pid, а затем выполнить команду kill -9 после сна. Вот пример:

 $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 } в $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 } 

Обратите внимание, что возможно, что ваш скрипт заканчивается красиво, а новый, другой, запускается с тем же pid, что и команда kill. Это маловероятно, но вы должны учитывать это как возможность, если используете этот подход.