Web服务器是否可以使用扩展的输出时间流来响应HTTP请求?

时间:2011-04-18 22:06:26

标签: php apache http stdout

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

2 个答案:

答案 0 :(得分: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 :(得分:0)

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

这篇关于connection handling的PHP文档提供了很多关于保持连接活动的好信息。