header( 'Content-type: text/html; charset=utf-8' );
echo 'Begin ...<br />';
ob_start();
for( $i = 0 ; $i < 10 ; $i++ )
{
echo $i . '<br />';
flush();
ob_flush();
sleep(1);
}
почему этот код не выводит $ я каждую секунду? он выводится через 10 секунд позже
Мне кажется, что ваш код действительно выводит $ я каждые 1 секунду, когда он работает от терминала, но он не делает этого при загрузке через сеть.
Обходной путь для вас - включить скрытую промывку: http://php.net/manual/en/function.ob-implicit-flush.php
И удалите этот вызов ob_start()
. Следующий код работает отлично:
<?php
header( 'Content-type: text/html; charset=utf-8' );
echo 'Begin ...<br />';
ob_implicit_flush (1);
for( $i = 0 ; $i < 10 ; $i++ )
{
echo $i . '<br />';
flush();
ob_flush();
sleep(1);
}
?>
Он фактически выводит $i
каждую секунду, но поскольку вы находитесь на стороне сервера (используя PHP), страница будет загружаться только после того, как весь PHP уже будет выполнен.
Если вы хотите, чтобы страница выводила каждый индекс i
каждую секунду, вы должны сделать это в javascript.