控制正在发送的输出';正在处理


Control output being sent while it's being processed

我已经实现了一个大约需要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";

处理完成后将获得输出的原因是php的输出缓冲区,最终是Web服务器的缓冲区。

在每隔几条echo语句之后,您将不得不通过调用ob_flush()flush()来刷新这些缓冲区。

有关更多技术信息,请参阅PHP缓冲区ob_flush()与flush()