Как запланировать PHP скрипт на Завершение работы (из CLI) - PullRequest
0 голосов
/ 14 декабря 2010

Я обрабатываю большой файл .gz с помощью PHP (передача данных из gz в mysql), на файл .gz уходит около 10 минут.У меня есть много файлов .gz для обработки.

После того, как PHP закончил с одним файлом, мне нужно вручную изменить скрипт PHP, чтобы выбрать другой файл .gz, а затем снова запустить скрипт вручную.

Я хочу, чтобы он автоматически запускал следующее задание для обработки следующего файла.файл gz называется 1, 2, 3, 4, 5 ... Я могу просто сделать цикл примерно таким (файл процесса 1 - 5):

for ($i = 1 ; $i >= 5; $i++)
{
    $file = gzfile($i.'.gz')
    ...gz content processing...
}

Однако, посколькуФайл gz действительно большой, я не могу этого сделать, потому что, если я использую этот цикл, PHP будет запускать несколько больших файлов gz как одно задание сценария.(занимает много памяти)

Что я хочу сделать, это после того, как PHP закончит с одной работой, я хочу новую работу для обработки следующего файла.это:

    $file = gzfile($_GET['filename'].'.gz')
    ...gz content processing...

Спасибо

Ответы [ 3 ]

3 голосов
/ 14 декабря 2010

Если вы очистите после обработки и освободите всю память, используя unset(), вы можете просто обернуть весь скрипт в цикл foreach (glob(...) as $filename).Как это:

<?php
foreach (glob(...) as $filename) {
    // your script code here
    unset($thisVar, $thatVar, ...);
}
?>
0 голосов
/ 14 декабря 2010

Вы должны вызывать скрипт PHP с аргументом из скрипта оболочки. Вот документ, как использовать параметры командной строки в PHP http://php.net/manual/en/features.commandline.php

Или, я не могу попробовать сейчас, но вы можете дать шанс на сброс ($ file) после обработки gzip.

for ($i = 1 ; $i >= 5; $i++)
{
    $file = gzfile($i.'.gz')
    ...gz content processing...
    unset($file);
}
0 голосов
/ 14 декабря 2010

Что вам нужно сделать, это

  • Запланировать cronjob для запуска вашего php-скрипта каждые x минут
  • Когда скрипт запускается, проверьте, есть ли файл блокировки на местене создавать и начинать обработку следующего необработанного файла gz, если да, прервать
  • Дождаться очистки очереди
...