Ответ 1
Возможно, я ошибаюсь, но насколько я понимаю, вы запрашиваете объяснение кода решения "PHP comments".
Хитрость заключается в том, чтобы создать дочерний процесс, используя функцию pcntl_fork, которая завершит исходный (родительский) процесс после некоторого таймаута. Функция pcntl_fork возвращает идентификатор процесса только что созданного дочернего процесса в потоке выполнения родительского процесса и ноль в потоке выполнения дочернего процесса. Это означает, что родительский процесс выполнит код в выражении if, а дочерний процесс выполнит код под else. И, как мы видим из кода, родительский процесс будет выполнять бесконечный цикл, пока дочерний процесс будет ждать 5 секунд, а затем убьет его родителя. Поэтому в основном вы хотите сделать что-то вроде этого:
$real_execution_time_limit = 60; // one minute
if (pcntl_fork())
{
// some long time code which should be
// terminated after $real_execution_time_limit seconds passed if it not
// finished by that time
}
else
{
sleep($real_execution_time_limit);
posix_kill(posix_getppid(), SIGKILL);
}
Надеюсь, я хорошо это сделал. Сообщите мне, если у вас есть вопрос относительно этого решения.