За последние 24 часа нас посетили 20295 программистов и 1712 роботов. Сейчас ищет 1741 программист ...

Помогите с буферизацией

Тема в разделе "PHP и базы данных", создана пользователем ocheretko, 27 май 2010.

  1. ocheretko

    ocheretko Активный пользователь

    С нами с:
    27 май 2010
    Сообщения:
    12
    Симпатии:
    0
    Здравствуйте, подскажите от чего это зависит. Я исполняю такой код:

    <?php
    echo 'test 1<br>';
    SLEEP(5);
    echo 'test 2';

    ?>


    Браузер выводит через 5 секунд сразу 2 надписи. Возможно ли сделать так, чтобы браузер сперва вывел первую надпись, а через 5 секунд "догрузил" вторую?
     
  2. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    ИМХО так нельзя. Можно аяксом дергать скрипт через 5 секунд.
     
  3. ocheretko

    ocheretko Активный пользователь

    С нами с:
    27 май 2010
    Сообщения:
    12
    Симпатии:
    0
    Это зависит от самого браузера? Если запускать консольно
    Код (Text):
    1. php.exe sctip.php
    в консоль выводит
     
  4. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    В консоль да, там всё будет как ты хочешь.

    Это не фича браузера, это фича веб-сервера. В пхп есть одна настройка, связанная с буферизацией - output_buffering. Но это тебе не поможет.
     
  5. ocheretko

    ocheretko Активный пользователь

    С нами с:
    27 май 2010
    Сообщения:
    12
    Симпатии:
    0
    Вопрос решен:

    <?php
    ob_implicit_flush(); /// Выводим сразу все что сгенерировано PHP
    echo 'test 1<br>';
    SLEEP(5);
    echo 'test 2';
    ?>

    Это не связано с вебсервером
     
  6. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    вы ошибаетесь.
     
  7. ocheretko

    ocheretko Активный пользователь

    С нами с:
    27 май 2010
    Сообщения:
    12
    Симпатии:
    0
    ну я проверил из ob_implicit_flush() - работает. Сперва выводит первую надпись, потом вторую через 5 секунд
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ocheretko
    у меня выводит все сразу через 5 секунд. ;)
     
  9. stas_t

    stas_t Активный пользователь

    С нами с:
    24 апр 2007
    Сообщения:
    500
    Симпатии:
    0
    Адрес:
    Courbevoie, France
    добрый вечер
    во-первых, зависит от настройки output buffering. отключите его при помощи ob_end_flush (вместо ob_implicit_flush)
    во-вторых, от настроек сервера. апач можно настроить так, чтобы он выплёвывал клиенту данные не по мере поступления, а блоками по x килобайт (но в установке по умолчанию, по-моему, не используется)
    в-третьих, от клиента. хром, например, будет ждать конца передачи, а фф отобразит получаемые данные сразу