Бортовой журнал Ктулху

Циклический скрипт на PHP

При обработке больших объемов информации бывает необходима работа скрипта дольше времени исполнения на веб-сервере.

Выполнение всего скрипта разбивается на шаги. Каждый шаг выполняется после перезапуска скрипта и содержит такое количество циклов обработки информации, которое гарантированно будет выполнено сервером. Другими словами, часть обработки, перезапустили скрипт, обработали следующую порцию информации и так далее, пока вся информация не будет обработана. При этом при каждом перезапуске скрипта память и время выполнения обнуляется.

Файл скрипта строится примерно так: вычисление параметров шага -> обработка порции данных -> перезапуск этого же скрипта с новыми параметрами шага.

Вариант на JS.

// определяем параметры шага
$step_size = 500; // количество единиц информации, обрабатываемых за шаг
$step=$_GET['step']; // определяем номер шага, для примера мы его передаем через GET
if ($step=='') { $step=1; } // если шаг не задан, то 1
$start = ($step-1)*$step_size; // начальная позиция информации для обработки
$newstep = $step+1; // следующий шаг
/* обработка $step_size единиц информации, начиная с позиции $start */
// переадресация на самого себя с новыми параметрами
header("Location: script.php?step=".$newstep." ");

 

Вариант на PHP+wget

// определяем параметры шага
$step_size = 500; // количество единиц информации, обрабатываемых за шаг
$step=$_GET['step']; // определяем номер шага, для примера мы его передаем через GET
if ($step=='') { $step=1; } // если шаг не задан, то 1
$start = ($step-1)*$step_size; // начальная позиция информации для обработки
$newstep = $step+1; // следующий шаг
/* обработка $step_size единиц информации, начиная с позиции $start */
// переадресация на самого себя с новыми параметрами
exec('wget -b -q -O temp.php http://www.site.ru/script.php');