我已经实施了一个文件优化脚本,大约需要30秒或更长时间。有一个循环,我在其中添加了回声以跟踪正在处理的内容。
但是,大多数情况下,直到流程结束才会发送输出。
我如何控制它以便在迭代中发送回声,就像它们已经完成一样?
修改
这是隐含的代码,带有输出缓冲区函数:
set_time_limit(60);
ini_set("memory_limit", "256M");
$documents = $this->documents_model->get($date1, $date2);
ob_start();
echo '-- Start ' . "<br>\n";
ob_end_flush();
flush();
foreach ($documents as $document) {
ob_start();
echo '-- Processing document ' . $document->id . "<br>\n";
$file = $document->get_file_name();
if (! $file || ! file_exists(DOCUMENT_ROOT . 'documents/' . $file)) {
echo '---- Document ' . $document->id . " has no PDF file yet or it was deleted<br>\n";
$path = $this->documents_model->generatePDF($document);
echo '------ file generated: ' . $path;
}
ob_end_flush();
flush();
}
echo '-- End ' . "<br>\n";
答案 0 :(得分:1)
处理完成后你得到输出的原因是php的输出缓冲区,最后是你的webserver的缓冲区。
在每几个ob_flush()
语句后,您必须使用flush()
和echo
的调用来刷新这些缓冲区。
有关更多技术信息,请参阅PHP buffer ob_flush() vs. flush()