PHP:在运行时打印状态消息


PHP: Printing out status messages during runtime

我正在开发一个长时间运行的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完成解析之前,它将输出:

迭代结束。

实现这一目标的最佳方法是什么?

如果从CLI运行PHP,则可以直接输出到stdout,而不必等待脚本结束,使用:

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

如果从CGI运行,这对于这样的脚本来说真的很糟糕,您必须使用flush();

更改缓冲区的行为方式。

尝试将运行时状态报告写入文件,然后使用ajax查看文件的实时更新,根据这个问题:更新文件的实时提要