Web 服务器是否可以通过延长时间的输出流来响应 HTTP 请求?

问题描述 投票:0回答:2

当您在控制台中运行 PHP 脚本时,该脚本的所有标准输出文本都会在脚本运行时显示在控制台窗口中。当运行冗长的 PHP 脚本时,浏览器窗口是否可以类似地在浏览器中接收状态报告,而不是在脚本结束时转储所有输出?

php apache http stdout
2个回答
4
投票

是的。只需定期调用flush()和ob_flush()即可。至少每 120 秒写入一些输出以保持与浏览器的连接非常重要。

一个粗略的例子:

    while(!$done) {
        //doWork();
        echo number_format(100 * ($workDone/$workTotal)) . "% ";
        flush();
        ob_flush();
    }

编辑:这是在我的环境中有效的任意概念证明:

print('hello');
print(str_repeat(".\n", 2048));
flush();
//this might be a safe way to only flush the buffer if necessary?
if(ob_get_length())
    ob_flush();
sleep(60);

-1
投票

是的,如果你的执行时间特别长,你需要担心的一件事就是超时。这可能会因 PHP 超时或浏览器超时而发生(通常大约 2 分钟)。

这个关于 连接处理 的 PHP 文档有很多关于保持连接活动的好信息。

© www.soinside.com 2019 - 2024. All rights reserved.