Ошибка PHP при выводе в реальном времени

1
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 секунд позже

Теги:
flush

2 ответа

0
Лучший ответ

Мне кажется, что ваш код действительно выводит $ я каждые 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);
    }
?>
  • 0
    спасибо за ваш ответ, думал, что до сих пор нет никакого эффекта.
  • 0
    похоже, это моя проблема с окружающей средой. Я использую phpstudy.net/phpstudy/phpStudy.zip , это все в одном PHP среды для Windows. при использовании WampServer2.1a-x32.exe этот код будет работать отлично, может быть проблема с расширением или проблема с vc. Кстати, знаете ли вы какие-либо форумы или блог или сайт для изучения php?
Показать ещё 1 комментарий
0

Он фактически выводит $i каждую секунду, но поскольку вы находитесь на стороне сервера (используя PHP), страница будет загружаться только после того, как весь PHP уже будет выполнен.

Если вы хотите, чтобы страница выводила каждый индекс i каждую секунду, вы должны сделать это в javascript.

  • 0
    спасибо за ответ когда-нибудь этот код работает отлично. как до пола.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню