我正在开发一个长时间运行的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秒,输出:
那么在PHP完成解析之前,它将输出:完成迭代#1
开始迭代#2
设置时间限制,开始10秒睡眠
迭代结束。
实现这一目标的最佳方法是什么?
如果从CLI运行PHP,则可以直接输出到stdout,而不必等待脚本结束,使用:
$handle = fopen('php://stdout', 'r');
fwrite($handle, $output);
如果从CGI运行,这对于这样的脚本来说真的很糟糕,您必须使用flush();
尝试将运行时状态报告写入文件,然后使用ajax查看文件的实时更新,根据这个问题:更新文件的实时提要