控制输出在处理时发送

时间:2016-04-01 12:06:31

标签: php

我已经实施了一个文件优化脚本,大约需要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";

1 个答案:

答案 0 :(得分:1)

处理完成后你得到输出的原因是php的输出缓冲区,最后是你的webserver的缓冲区。

在每几个ob_flush()语句后,您必须使用flush()echo的调用来刷新这些缓冲区。

有关更多技术信息,请参阅PHP buffer ob_flush() vs. flush()