2016-04-30 4 views
-1

Функция, которая ждет около одного дня в фоновом режиме, а затем выполняет другую.Как я могу отложить функции php в течение нескольких дней?

Как:

function Sleep(){ 
    sleep(/* One Day */); 
    Run(); 
} 
function Run(){ 
    //One Day later, 
    //execute code. 
} 

Или Maby что-то вроде этого (это вымышленное):

class Waiter extends Timer{ 
    $time = 0; 
    function __construct($time){ 
     $this->time = $time; 
    } 
    function onDelay(){ 
     //One day Later. 
    } 
} 
$wait = new Waiter(/* One Day */); 

Есть хорошее решение?

Или функция sleep() также okey? Но я должен сказать, что время выполнения составляет 30 секунд.

+7

Почему вы не используете работу cron? –

+0

В чем заключен контекст? Веб-страница ? служба, написанная с помощью PHP CLI? – Mat

+0

Cron был бы оптимальным в большинстве случаев. – Brian

ответ

0

Как вы сказали, время выполнения составляет 30 секунд, общий скрипт принудительно заканчивается через 30 секунд. Он не может ждать дольше.

Как уже было предложено, вы можете использовать работу cron.

Если ваша проблема не является регулярной периодической, вы можете написать небольшой скрипт, который записывает время (с датой), когда функция должна выполняться в файл (или базу данных). Затем cron будет выполнять каждый час (или если это важно, каждую минуту) и проверяет, должна ли выполняться функция

0

Использование cronjob является правильным решением проблемы. Если по какой-то причине вы не можете его использовать, убедитесь, что вы используете ignore_user_abort(1) и set_time_limit(0); в скрипте php.


int ignore_user_abort ([ bool $value ]) 

При запуске PHP в качестве сценария командной строки, и терминал скрипта идет прочь без сценария быть прекращен, то сценарий будет умереть в следующий раз он пытается писать что-либо, если значение установлено значение ИСТИНА

bool set_time_limit (int $seconds) 

установите количество секунд сценарий разрешено работать. Если это результат , скрипт возвращает фатальную ошибку. Предел по умолчанию - 30 секунд или, если он существует, значение max_execution_time, определенное в файле php.ini .

При вызове set_time_limit() перезапускает счетчик тайм-аута с нуля. Другими словами, если тайм-аут составляет 30 секунд по умолчанию и 25 секунд для выполнения скрипта, вызов, такой как set_time_limit (20), составляет , скрипт будет работать в общей сложности за 45 секунд до истечения времени ожидания.

0

Кронки были упомянуты, но есть второй вариант - очередь.

https://en.wikipedia.org/wiki/Message_queue

Существует широкий выбор программного обеспечения очереди, начиная от тех, которые вы установите себя как Beanstalk или RabbitMQ для размещенных на них в облаке, как Amazon SQS или IronMQ.