PHP: печать сообщений о состоянии во время выполнения - PullRequest
2 голосов
/ 18 сентября 2011

Я разрабатываю долгосрочный скрипт php, который собирает извлеченную информацию из нескольких источников, организует ее и кэширует в базе данных.

Поскольку у этого скрипта очень высокое время выполнения, я хотел бы распечатать отчеты о состоянии времени выполнения , чтобы отслеживать прогресс.

for ($i = 1; $i<= 10; $i++) {
    echo "Starting iteration #$i\n";
    set_time_limit(40);
    echo "Time Limit set, starting 10 second sleep.\n";
    sleep(10);
    echo "Finishing iteration #$i\n\n";
}
echo "Iterations Finished.";

будет выводить:

Начальная итерация # 1

Установлен лимит времени, начиная с 10 секунд сна

, затем подождите 10 секунд и выведите:

Завершающая итерация # 1

Начальная итерация # 2

Установлен лимит времени, начиная с 10 секунд сна

, затем перед тем, как php завершит разбор, он выдаст:

Итерации завершены.

Каков наилучший способ достичь этого?

Ответы [ 2 ]

3 голосов
/ 18 сентября 2011

Если вы используете PHP из CLI, вы можете выводить напрямую в stdout, не дожидаясь сценария до конца, используя:

$handle = fopen('php://stdout', 'r');
fwrite($handle, $output);

Если запустить из CGI, что было бы очень плохо для скрипта, подобного этому, вам пришлось бы изменить работу буфера с помощью flush ();

1 голос
/ 18 сентября 2011

Попробуйте записать отчеты о состоянии среды выполнения в файл, а затем просмотреть прямые обновления файла с помощью ajax, задав следующие вопросы: Прямая передача файла обновления

...