【问题标题】:how to show results while a php script is still running如何在 php 脚本仍在运行时显示结果
【发布时间】:2012-12-16 01:33:10
【问题描述】:

所以我试过Show results while script is still executing

但由于某种原因它不起作用,所以这是我目前所拥有的:

ob_start();
include "../../common.php";

set_time_limit (0);

$start = (string) $_GET['start'];
$end = (string) $_GET['end'];

for($i = $start; strcmp($i, $end); $i = bcadd($i, 1)){

echo $i;
ob_flush();

}

ob_end_flush(); 

更新代码

*请注意,这段代码还不能工作!

set_time_limit(0);

$start = $_GET['start'];
$end = $_GET['end'];

for(;$start < $end;$start++){
$content = file_get_contents("[some internal page]");
echo $content;
usleep(10); 
flush();
}

【问题讨论】:

    标签: php


    【解决方案1】:

    尝试在调用ob_flush() 之后添加对flush() 的调用。这仅在您的服务器配置为能够执行此操作时才有效,并且不能保证客户端会明智地处理它,但这是您最好的选择。

    我在这里遇到的一个症结是你有zlib.output_compression 配置你绝对不能这样做,句号。 zlib 输出压缩过程在您的任何代码执行之前启动,并且无法在运行时由您的脚本使用ini_set() 等进行控制。

    【讨论】:

    • 我已经尝试过你说的,但它不起作用...这是我的 php.ini 设置,可能是:s135001.gridserver.com/gs-bin/phpinfo.php5 ???
    • 嘿,你的脚本工作了,但是当我将它与我自己的一段代码一起使用时,它停止工作了!!! :S 无论如何我可以私下和你谈谈吗?
    • @ahoura 我要睡觉了(这里是晚上 11 点),但我会在大约 11 小时后回来,所以如果你愿意的话,我会再聊。我的猜测是您的问题是您没有向浏览器发送足够的内容以使其开始渲染。
    • 好的,请在您在线时告诉我,以便我们完成这项工作:) 非常感谢
    【解决方案2】:

    您通常需要同时调用flush()ob_flush()。见:http://php.net/manual/en/function.flush.php

    此外,您不能对客户端的浏览器缓冲区做任何事情。浏览器将尽可能长或尽可能少地缓冲数据。一些服务器可能也不支持刷新他们的缓冲区。

    【讨论】:

    • 我已经尝试过你说的,但它不起作用...这是我的 php.ini 设置,可能是:s135001.gridserver.com/gs-bin/phpinfo.php5 ???
    • 没有什么我可以看到会导致它,但后来我不知道一切...尝试其中包含此脚本:&lt;?php set_time_limit(0); for ($i = 1; $i &lt; 1000; $i++) {echo "This is iteration $i&lt;br /&gt;"; usleep(10000); flush();} 对于我在 IE8 中,大约需要 2-渲染任何内容前 3 秒。
    • @ahoura,在您的服务器上发布一个测试脚本的链接。
    • 它的 wecircled.com/lab/id/imgtest.php 我将循环增加到 100000 但它仍然只在整个事情完成后才显示!
    • @ahoura,在我的浏览器上,它运行良好。您的代码没有任何问题。您遇到了客户端缓冲,这是您无法解决的问题。
    【解决方案3】:

    在 ob_flush() 之后;添加冲洗();这实际上会刷新写缓冲区和输出缓冲区。 ob_flush 刷新到写入缓冲区,flush() 然后将其推送到客户端。通常至少。

    【讨论】:

    猜你喜欢
    • 2011-07-21
    • 1970-01-01
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 2017-05-15
    • 1970-01-01
    相关资源
    最近更新 更多