【问题标题】:PHP flush() doesn't work with laravel?PHP flush() 不适用于 laravel?
【发布时间】:2012-11-27 06:28:32
【问题描述】:

我正在使用 Laravel,我需要在发生数据时输出数据。当我尝试在 Laravel 之外加载页面时,它工作得很好。如果我在 Laravel 中使用它,它不会刷新,它会等到结束并打印结果。

view.php

<?php

if (ob_get_level() == 0) ob_start();
for ($i = 0; $i <= 10; $i++){

    echo "<br> Line to show. $i";
    echo str_pad('',4096)."\n";    

    ob_flush();
    flush();
    sleep(1);

}
ob_end_flush();
?>

【问题讨论】:

  • php 从来不擅长这个——也从来没有真正为它设计过,作为服务器端,你有没有考虑过另一种方法
  • 像大多数框架一样,视图的输出包含在 ob_*() 调用中,以允许诸如压缩、更好的错误处理以及在打印数据后设置 HTTP 标头等功能。完成所有操作后,它将输出数据。所以你自己的 ob_*() 调用不会脱离外部调用。
  • 那么我有什么选择?

标签: php laravel


【解决方案1】:

更新,任何来这里的人。

上述解决方案对我不起作用。什么有效,是添加

header('X-Accel-Buffering: no');

在任何输出之前。

在这里找到它:https://laracasts.com/discuss/channels/laravel/live-output-in-blade-template-ob-flush

【讨论】:

    【解决方案2】:

    这个序列对我有用。

    ob_implicit_flush(true);
    echo "Processing ... "; // Or give out JSON output
    ob_flush();
    sleep(5); //A time-consuming synchronous process (SMTP mail, maybe?)
    echo "Done";
    

    【讨论】:

      【解决方案3】:

      想通了,我需要添加 ob_flush();

      【讨论】:

        猜你喜欢
        • 2012-01-24
        • 1970-01-01
        • 1970-01-01
        • 2012-08-02
        • 2022-06-30
        • 2015-10-02
        • 2018-03-29
        • 1970-01-01
        • 2017-08-01
        相关资源
        最近更新 更多