2013-04-04 2 views
0

Я хочу запустить файл для фиксированного периода времени. Для этого я могу использовать функцию set_time_limit. Но я хочу вызвать функцию во время завершения. Эту функцию необходимо вызвать. В противном случае я не смогу снова запустить этот файл.пользователь определяет вызов функции во время set_time_limit PHP

Есть ли способ вызвать функцию во время завершения, когда встречается ограничение set_time_limit.?

+0

Используете ли вы этот скрипт для веб-запроса или запускаете из командной строки? – Naveed

ответ

1

Вы можете использовать register_shutdown_function для установки функции обратного вызова при завершении выполнения сценария или вызывается функция exit.

1

Вы можете использовать register_shutdown_function:

<?php 
function shutdown() { 
    // 3 seconds are over 
    set_time_limit(0); // now we want no limit anymore 
    echo "Shutdown!\n"; 
    while(true); // some other long action 
} 
error_reporting(0); 
set_time_limit(3); 
register_shutdown_function('shutdown'); 
while(true); // some long action 

error_reporting вызов делается, чтобы избежать сообщения об ошибке, когда лимит времени превышает.

+0

Спасибо за ваш ответ, но у меня есть сомнения, как вы упомянули в своем коде, set_time_limit с значением параметра 3, что означает, что файл будет выполняться в течение 3 минут, а во время завершения будет вызываться register_shutdown_function. Но что теперь позволяет запускать функцию обратного вызова, поскольку применяется ограничение по времени. Что делать, если функция обратного вызова будет запускать сценарий длинных действий. –

+0

@AbhimanyuSharma Это хороший момент. Я протестировал это, и кажется, что как только вызывается функция обратного вызова, интерпретатор PHP снова запускает таймаут, поэтому функция останова работает не более 3 секунд. Вы можете предотвратить это, вызвав 'set_time_limit (0)' в функции выключения, которая устанавливает бесконечное ограничение по времени. Я добавил это к моему ответу. Но обратите внимание, что, как правило, не рекомендуется делать длительные действия при выключении, так как обратный вызов также запускается, когда сценарий останавливается по другой причине, кроме превышения тайм-аута! –