无法将数据块分块发送到浏览器

时间:2016-01-07 08:40:13

标签: php

我有一个脚本并尝试以分块的形式发送数据。 为此,我在php.ini中禁用了output_buffering

output_buffering=off

现在当我运行我的脚本时:

echo "stream1";
sleep(5);
echo "stream2";

在完全执行脚本后显示整个输出,而不是先发送stream1,然后在等待5秒后再将stream2发送到浏览器。

1 个答案:

答案 0 :(得分:0)

尝试如下:

<?PHP
ob_start();

echo 'Output one.';
ob_flush();
sleep(5);
echo 'Output two.';
ob_flush();
?>

我认为这更像是一个http请求/响应问题。在命令行上,脚本运行正常。

通常,响应已完全准备好并发送给客户端。如果您的响应具有必须发送多个tcp包的大小,则在脚本准备好处理之前可能会发送第一个包。所以它取决于输出的大小。根据客户端/ Web浏览器的不同,在完成响应到达客户端之前,也可能会出现第一个包。

尝试以下脚本:

header( 'Content-type: text/html; charset=utf-8' );
header("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");
set_time_limit(0);
ob_implicit_flush(1);
for ($i = 0; $i < 10; $i++) { 
    $randSlp=rand(1,3);
    echo "Sleeping for ".$randSlp." second. ";;
    sleep(1);
    if(ob_get_level()>0)
       ob_end_flush(); 
}