我正在开发一个长期运行的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完成解析之前,它将输出:
完成迭代。
实现这一目标的最佳方法是什么?
答案 0 :(得分:3)
如果从CLI运行PHP,则可以直接输出到stdout,而无需等待脚本 结束,使用:
$handle = fopen('php://stdout', 'r');
fwrite($handle, $output);
如果从CGI运行,这对于这样的脚本来说真的很糟糕,你将不得不改变缓冲区的行为方式flush();
答案 1 :(得分:1)
尝试将运行时状态报告写入文件,然后根据以下问题使用ajax查看文件的实时更新:Live feed of an updating file