Como você define o tempo máximo de execução do componente CLI do PHP? Eu tenho um script CLI que entrou em um loop infinito e não sei como matá-lo sem reiniciar. Eu usei o quicksilver para iniciá-lo, então não posso pressionar control + c na linha de comando. Eu tentei executar ps -A
(mostrar todos os processos), mas o php não está aparecendo nessa lista, então talvez ele tenha expirado por conta própria - mas como você define manualmente o limite de tempo?
Eu tentei encontrar informações sobre onde eu deveria definir a configuração max_execution_time
, estou acostumado a configurar isso para a versão do PHP que roda com o apache, mas não tenho idéia de onde configurá-lo para a versão do PHP que vive em /usr/bin
.
Eu vi a seguinte citação, que parece ser precisa (veja a imagem abaixo), mas ter um tempo de execução ilimitado não parece ser uma boa ideia.
Keep in mind that for CLI SAPI max_execution_time is hardcoded to 0. So it seems to be changed by ini_set or set_time_limit but it isn't, actually.
The only references I've found to this strange decision are deep in bugtracker (http://bugs.php.net/37306) and in php.ini (comments for 'max_execution_time' directive).
(via http://php.net/manual/en/function.set-time-limit.php)
ini_set('max_execution_time')
não tem efeito. Eu também tentei a mesma coisa e segui o mesmo resultado com set_time_limit(7)
.
Atualizar
Portanto,parecehavertrêsmaneirasdeconseguirisso:
Noscript:
set_time_limit(10);//thiswayini_set('max_execution_time',10);//orthisway
Ouaochamaroscript:
php-dmax_execution_time=5script.php
Pararesponderminhaperguntasobreondeoarquivophp.iniseriacarregado,seriade/etc/php.ini
seeleexistir.Essearquivotambémprecisaserlegívelpelousuárioqueestáexecutandooscriptphp,entãoseelefoicriadopelorooteumusuárionãopode"ler", isso significa que o php provavelmente não pode "ler" também.
No entanto, parece que qualquer max_execution_time definido em /etc/php.ini
na verdade não afetará os scripts da CLI - mesmo que o arquivo esteja sendo carregado corretamente (use phpinfo()
para descobrir) - então você deve usar um dos outros métodos mencionado acima.
Em relação ao uso de um loop de sono para testar isso, aprendi que não funcionará.
The set_time_limit() function and the configuration directive max_execution_time only affect the execution time of the script itself. Any time spent on activity that happens outside the execution of the script such as system calls using system(), the sleep() function, database queries, etc. is not included when determining the maximum time that the script has been running
Confira uma pergunta muito semelhante no Stack Overflow: link