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

Php 无法将分块的数据发送到浏览器,php,Php,我有一个脚本,正在尝试分块发送数据。 为此,我在php.ini中禁用了输出缓冲 output_buffering=off 现在,当我运行脚本时: echo "stream1"; sleep(5); echo "stream2"; 在完全执行脚本后,它将显示整个输出,而不是先发送stream1,然后在等待5秒后再发送stream2到浏览器。请尝试以下操作: <?PHP ob_start(); echo 'Output one.'; ob_flush(); sleep(5); echo

我有一个脚本,正在尝试分块发送数据。 为此,我在php.ini中禁用了输出缓冲

output_buffering=off
现在,当我运行脚本时:

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

请尝试以下操作:

<?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(); 
}
标题('Content-type:text/html;charset=utf-8');
标头(“缓存控制:无缓存,必须重新验证”);
标题(“杂注:无缓存”);
设置时间限制(0);
ob_隐式_冲洗(1);
对于($i=0;$i<10;$i++){
$randSlp=兰特(1,3);
echo“为……而睡”。$randSlp.;秒;;
睡眠(1);
如果(ob_get_level()>0)
ob_end_flush();
}

我不是PHP开发人员,但这很有意义。它是一个后端脚本,在服务器上工作,其工作方式是执行脚本并将结果发送到客户端。如果要“一个接一个”地发送数据,则需要客户端向服务器发送请求,脚本应发送新的数据部分以响应请求。1。您需要
flush()
才能真正发送输出和2。您不能保证浏览器确实决定立即显示收到的所有内容;冲洗();但它仍然同时显示stream1stream2。但首先请告诉我,在尝试您的脚本之前,我应该在php.ini中启用输出缓冲吗。