Например,
это не работает (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 />'; ?>
У меня есть PHP 5.4.11 VC9 и Apache 2.4.3 (apacheLounge), работающие на Win XP SP3.
Некоторые браузеры включают в себя собственный внутренний буфер, чтобы загружать и отображать более эффективно с меньшей изменчивостью. В большинстве случаев этот буфер составляет 4Kb, или 4096 байт.
То, что str_pad('',4096)
делает, составляет 4096 пробелов на выходе. Поскольку это HTML, эти пространства сворачиваются в одно пространство.
В целом, на это поведение НЕ следует полагаться. Браузеры предназначены для просмотра веб-страниц, а не для укусов в консольные терминалы.
Кроме того, почему вы пишете </br>
? Нет такой вещи, как тег конца конца, а самозакрывающаяся версия – это <br />
В дополнение к указанию версии вашего браузера, вы должны также указать веб-сервер, на котором работает PHP. В конце концов, вероятно, происходит буферизация вывода.
Если вы прочтете документацию на флеш , вы увидите, что это не гарантированная операция. Вид, как на диске, пишут, где даже если у вас есть библиотека и операционная система, все еще есть аппаратное обеспечение диска (возможно) для его буферизации. Только самые тщательные (и, следовательно, почти невозможные для порта) методы будут работать, и даже это не гарантировано.
Изменить: О, да, браузер (или ад, какой-то маршрутизатор или TCP-стек между ними) тоже может это сделать.
Это связано с тем, что движок рендеринга браузера должен получать достаточное количество данных, когда он решает отобразить содержимое на экране. И сколько данных требуется, так это решение браузера.
Для медленного хостинга попробуйте что-то вроде этого:
$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: https://wordpress.stackexchange.com/questions/231003/how-to-get-list-of-all-users -есть-метаданные