Функция, которая ждет около одного дня в фоновом режиме, а затем выполняет другой.
Подобно:
function Sleep(){
sleep( /* One Day */ );
Run();
}
function Run(){
//One Day later,
//execute code.
}
Или, может, что-то вроде этого (это вымышлено):
class Waiter extends Timer{
$time = 0;
function __construct($time){
$this->time = $time;
}
function onDelay(){
//One day Later.
}
}
$wait = new Waiter( /* One Day */ );
Есть ли хорошее решение?
Или функция sleep () тоже в порядке?
Но я должен сказать, что время выполнения составляет 30 секунд.
Как вы сказали, время выполнения составляет 30 секунд, общий сценарий принудительно завершается через 30 секунд. Это не может ждать дольше.
Как уже предлагалось, вы можете использовать работу cron.
Если ваша проблема не является регулярной повторяющейся, вы можете написать небольшой скрипт, который записывает время (с датой), когда функция должна выполняться в файл (или базу данных). Затем cron будет выполнять каждый час (или, если это важно, каждую минуту) и проверять, нужно ли выполнять функцию
Используя cronjob является правильным решением для вашей проблемы. Если по какой-либо причине вы не можете использовать его, убедитесь, что вы используете ignore_user_abort(1)
а также set_time_limit(0);
на сценарии PHP.
int ignore_user_abort ([ bool $value ] )
При запуске PHP в качестве сценария командной строки, и tty сценария идет
без завершения сценария, то сценарий умрет
в следующий раз он пытается что-то написать, если значение не установлено в TRUE
bool set_time_limit ( int $seconds )
Установите количество секунд, в течение которых скрипт может быть запущен. Если это
достигнут сценарий возвращает фатальную ошибку. Предел по умолчанию составляет 30
секунд или, если оно существует, значение max_execution_time, определенное в
php.ini.При вызове set_time_limit () сбрасывает счетчик тайм-аута с нуля.
Другими словами, если таймаут установлен по умолчанию 30 секунд и 25
секунд в выполнении скрипта вызов, такой как set_time_limit (20)
выполнено, сценарий будет работать в общей сложности 45 секунд до истечения времени ожидания.
Кроны уже упоминались, но есть и второй вариант — организация очереди.
https://en.wikipedia.org/wiki/Message_queue
Доступно большое разнообразие программного обеспечения для очередей, от устанавливаемого вами, например, Beanstalk или RabbitMQ, до размещенного в облаке, такого как Amazon SQS или IronMQ.