如果我从XAMPP上的本地服务器上以chrome加载此脚本:
header("Content-Type:text/plain");
set_time_limit(0);
$max = 40;
for ($i = 0; $i < $max; $i++) {
$response = array( 'server time: ' . date("h:i:s", time()), 'progress' => round($i/$max*100));
echo json_encode($response);
ob_flush();
flush();
sleep(1);
}
ob_clean();如您所料,该页面每秒钟显示一个新的响应。但是,当我将它上传到远程服务器(运行相同版本的php)时,它会等到整个脚本完成后才会显示输出。在非常长的脚本中,它每30-60秒左右更新一次输出。
正如标题所示,我尝试过使用所有不同的刷新函数,但都没有效果。我的本地服务器和远程服务器的php.ini可能有一些不同,但我不知道是什么。
请帮帮忙。
编辑
我一直在做更多的测试。我注意到,它只是每4096字节更新一次,这恰好是我的远程服务器的php值的'output_buffering‘。但是,由于某种原因,如果我将output_buffering更改为“1”或“off”,则不会发生任何变化。它仍然每4096字节更新一次。
我正在同一浏览器的不同服务器上测试两个相同的脚本。
发布于 2015-09-22 17:57:57
我没有考虑到nginx,它有自己的输出缓冲区。
我只是在php脚本的顶部添加了‘header(“:no”),现在一切都很好了。
发布于 2015-09-29 12:05:55
对我来说,添加header('Content-Encoding: none');就能做到这一点。在使用PHP时需要这样做。
发布于 2015-09-12 12:18:55
在您需要使用开始()和清洁()之前。并添加标题Content-Length或Transfer-Encoding: chunked。并检查«implicit_flush»是否在您的php.ini中
添加用于响应的填充。检查此代码:
<?php
set_time_limit(0);
ob_start();
header('Content-Type: text/plain');
define("PADDING", 16);
//+padding
for($i=0;$i<PADDING;$i++){
//64 spaces (1 block)
echo str_repeat(' ', 64);
}
$max = 40;
for ($i = 0; $i < $max; $i++) {
$response = array( 'server time: ' . date("h:i:s", time()), 'progress' => round($i/$max*100));
echo json_encode($response);
ob_flush();
flush();
sleep(1);
}
ob_end_clean();
?>https://stackoverflow.com/questions/32538548
复制相似问题