Попробуйте, как показано ниже:
<?PHP
ob_start();
echo 'Output one.';
ob_flush();
sleep(5);
echo 'Output two.';
ob_flush();
?>
Я думаю, что это скорее вопрос запрос HTTP/ответ. В командной строке скрипт работает нормально.
Обычно ответ готов полностью и отправляется клиенту. Если ваш ответ имеет такой размер, который нужно отправить нескольким пакетам tcp, может случиться так, что первые пакеты будут отправлены, прежде чем скрипт будет готов с обработкой. Таким образом, это зависит от размера вывода. В зависимости от клиента/веб-браузера также может случиться так, что первые пакеты будут отображаться до того, как на клиент поступит полный ответ.
Попробуйте ниже сценарий:
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();
}
Я являюсь словцо разработчик PHP, но это имеет смысл. Это встроенный скрипт, он работает на сервере и работает так, что скрипт выполняется, и результаты отправляются клиенту. Если вы хотите отправлять свои данные «один за другим», вам нужен ваш клиент для отправки запроса на сервер, и ваш скрипт должен отправить новую часть данных в ответ на ваш запрос. – john
1. вам нужно 'flush()' фактически отправить вывод и 2. у вас нет гарантии, что браузер действительно решит немедленно показать все полученные. – arkascha
, как вы сказали, я попробовал эхо «stream1»; промывать(); но он все еще показывает stream1stream2 вместе. – Curious