2

例如,

这不起作用(Firefox 21、IE8):

<?php
function flush_buffers(){
    ob_end_flush();
    ob_flush();
    flush();
    ob_start();
}  
ob_start();
echo 'Text 1<br />';
flush_buffers();
Sleep(2);
echo 'Text 2<br />';
flush_buffers();
Sleep(2);
echo 'Text 3<br />';
flush_buffers();
Sleep(2);
echo 'Text 4<br />';
?>

但这一个有效:

<?php
function flush_buffers(){
    echo str_pad('',4096);
    ob_end_flush();
    ob_flush();
    flush();
    ob_start();
}  
ob_start();
echo 'Text 1<br />';
flush_buffers();
Sleep(2);
echo 'Text 2<br />';
flush_buffers();
Sleep(2);
echo 'Text 3<br />';
flush_buffers();
Sleep(2);
echo 'Text 4<br />';
?>

我在 Win XP SP3 上运行 PHP 5.4.11 VC9 和 Apache 2.4.3 (apacheLounge)。

4

4 回答 4

5

一些浏览器包含自己的内部缓冲区,以便更有效地下载和显示,减少波动。在大多数情况下,此缓冲区为 4Kb,即 4096 字节。

什么str_pad('',4096)是将 4,096 个空格写入输出。由于它是 HTML,因此这些空间折叠成一个空间。

总体而言,不应依赖此行为。浏览器用于查看网页,而不是混入控制台终端。

还有,为什么要写</br>?没有结束<br>标签之类的东西,自动关闭的版本是<br />

于 2013-01-29T02:04:34.523 回答
1

除了指定您的浏览器版本之外,您还应该指定 PHP 正在运行的 Web 服务器。毕竟,这就是输出缓冲可能发生的地方。

如果您阅读有关 flush 的文档,您会发现这不是保证操作。有点像磁盘写入,即使您有库和操作系统合作,仍然有磁盘硬件(可能)缓冲它。只有最细致(因此几乎不可能移植)的方法才能起作用,甚至不能保证这一点。

编辑:哦,是的,浏览器(或地狱,中间的一些路由器或 TCP 堆栈)也可以做到这一点。

于 2013-01-29T02:02:45.183 回答
0

这是因为浏览器的渲染引擎在决定将内容渲染到屏幕时需要获取足够的数据。需要多少数据是由浏览器决定的。

于 2013-01-29T02:00:14.523 回答
0

对于慢速托管,请尝试以下操作:

$totalUsers = count_users();

echo 'There are ', $result['total_users'], ' total users<br />';
foreach($result['avail_roles'] as $role => $count)
    echo ', ', $count, ' are ', $role, 's';
echo '.';

$batchSize = 25;
$batchesCount = ceil($totalUsers['total_users'] / $batchSize);
$Users = array();
for ($count = 0; $count < $batchesCount; $count++) {
$args = array('number' => $batchSize, 'offset' => $count * $batchSize);
    $batchNewUsers = get_users($args);
    $Users = array_merge($Users, $batchNewUsers);
    sleep(1); # reduce load
    echo '.'.str_pad(' ',4096);# keep alive
}

echo '<br />All done.';

否则,您可能最好直接查询数据库,或者首先获取 ID 并按 ID 查询: https ://wordpress.stackexchange.com/questions/231003/how-to-get-list-of-all-users -那里的元数据

于 2017-07-01T21:17:10.757 回答