Испытание на выделенном сервере:
60 минут работы
0 ошибок
Испытание на хостинге:
36 минут работы
1 ошибка 508 Resource Limit Exceeded
Проверка и сбор статистики происходит с помощью записи вывода и времени вывода в лог и постоянного чтения JavaScript'ом этих логов.
Как предотвратить остановку скрипта (на хостинге не работают никакие set_time_limit)?
Сама рекурсия происходит пингованием самого себя (самовызовом).
Иногда что-то происходит и пинг не срабатывает. Вот рекурсия и останавливается.
На ошибку 508 не обращайте внимания. Она просто для статистики.
При чём после ошибки 508 скрипт всё-равно продолжает работать. Магия =)
Код:
daemon.php:
<?php
if(date('His')-file_get_contents('./date')<3)
exit; //защита от двойного запуска
file_put_contents('./date', date('His'));
function ping($action){
$h=$_SERVER[HTTP_HOST];
$http=fsockopen($h, 80, $e1, $e2, 1);
if($http){
fwrite($http,
'GET /'.$action.' HTTP/1.1'."\r\n".
'Accept: */*'."\r\n".
'Host: '.$h."\r\n\r\n"
);
fclose($http);
}
}
ping('core.php'); //запуск исполнительной программы
sleep(3);
ping('daemon.php'); //перезапуск текущей программы