所以我尝试了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();
}
答案 0 :(得分:2)
在致电ob_flush()
后尝试添加对flush()
的通话。这仅在您的服务器配置为能够执行此操作时才有效,并且不保证客户端能够理智地处理它,但这是您最好的选择。
我遇到的一个问题是你有zlib.output_compression配置你绝对不能这样做,完全停止。 zlib输出压缩过程在执行任何代码之前启动,并且在运行时使用ini_set()
等不能由脚本控制。
答案 1 :(得分:1)
您通常需要同时拨打flush()
和ob_flush()
。请参阅:http://php.net/manual/en/function.flush.php
此外,您无法对客户端上的浏览器缓冲区执行任何操作。浏览器将根据需要长时间或尽可能地缓冲数据。某些服务器也可能不支持刷新缓冲区。
答案 2 :(得分:1)
ob_flush()之后; add flush();这实际上刷新了写缓冲区和输出缓冲区。 ob_flush刷新到写缓冲区,flush()然后将其推送到客户端。通常至少。