За последние 24 часа нас посетили 62967 программистов и 1743 робота. Сейчас ищут 845 программистов ...

как отключить буферизацию

Тема в разделе "PHP для новичков", создана пользователем vikrorpert, 9 май 2015.

  1. vikrorpert

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

    С нами с:
    13 окт 2010
    Сообщения:
    984
    Симпатии:
    10
    есть скрипт, после сабмита выполняется ~10 сек
    хочу сразу после сабмита сразу вывести сообщение "идет поиск", затем страница догружается и выводится остальные данные
    гуглил про отключение буферизации,но не получается отключить
    вот пример кода
    Код (PHP):
    1. <?php
    2.  
    3. header('Cache-Control: no-cache');
    4.  
    5. ini_set('output_buffering', 'off');
    6. // Turn off PHP output compression
    7. ini_set('zlib.output_compression', false);
    8.  
    9. ini_set('implicit_flush', true);
    10.  
    11.  
    12. echo '1';
    13.  
    14.  
    15. for ($i=0;$i<5;$i++) {
    16.     sleep(1);
    17. }
    18.  
    19. echo '2';
    20. print ob_get_level ();
    21.  
    22.  
    выводится все после выполнения скрипта
     
  2. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    показать "идет поиск" и потом рефрешнуться к результату. не? ну или аякснуть результат
     
  3. vikrorpert

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

    С нами с:
    13 окт 2010
    Сообщения:
    984
    Симпатии:
    10
    спасибо за идею
    а насчет буферизации- почему так сложно ее отключить? или это потому что ее не нужно отключать?
     
  4. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    дело в том что буферизация в данном случае отключается только на уровне ответа пхп-машины вышестоящему процессу. если веб-сервер настроен получить полностью пакет данных и выбросить их пользователю только по завершению дочернего процесса - бесполезно пытаться выключить его на стороне пхп.
    ну и как бы нужно чуть более внимательно смотреть документацию. имплисид_флаш можно установить из сценария, аутпут_буфферинг - только через конфигурацию не ниже уровня каталога (.htaccess как минимум)
     
  5. vikrorpert

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

    С нами с:
    13 окт 2010
    Сообщения:
    984
    Симпатии:
    10
    еще пример
    Код (Text):
    1. text text text text text text text text text text text text text text text text text text text text text text text text text text text text
    2. text text text text text text text text text text text text text text text text text text text text text text text text text text text text
    3. text text text text text text text text text text text text text text text text text text text text text text text text text text text text
    4. text text text text text text text text text text text text text text text text text text text text text text text text text text text text
    5. text text text text text text text text text text text text text text text text text text text text text text text text text text text text
    6. text text text text text text text text text text text text text text text text text text text text text text text text text text text text
    7. text text text text text text text text text text text text text text text text text text text text text text text text text text text text
    8. text text text text text text text text text text text text text text text text text text text text text text text text text text text text
    9. text text text text text text text text text text text text text text text text text text text text text text text text text text text text
    10. text text text text text text text text text text text text text text text text text text text text text text text text text text text text
    11. text text text text text text text text text text text text text text text text text text text text text text text text text text text text
    12. text text text text text text text text text text text text text text text text text text text text text text text text text text text text
    13. text text text text text text text text text text text text text text text text text text text text text text text text text text text text
    14. text text text text text text text text text text text text text text text text text text text text text text text text text text text text
    15. text text text text text text text text text text text text text text text text text text text text text text text text text text text text
    16. text text text text text text text text text text text text text text text text text text text text text text text text text text text text
    17. text text text text text text text text text text text text text text text text text text text text text text text text text text text text
    18. text text text text text text text text text text text text text text text text text text text text text text text text text text text text
    19. text text text text text text text text text text text text text text text text text text text text text text text text text text text text
    20. text text text text text text text text text text text text text text text text text text text text text text text text text text text text
    21. text text text text text text text text text text text text text text text text text text text text text text text text text text text text
    22. text text text text text text text text text text text text text text text text text text text text text text text text text text text text
    23. text text text text text text text text text text text text text text text text text text text text text text text text text text text text
    24. text text text text text text text text text text text text text text text text text text text text text text text text text text text text
    25. text text text text text text text text text text text text text text text text text text text text text text text text text text text text
    26. text text text text text text text text text text text text text text text text text text text text text text text text text text text text
    27. text text text text text text text text text text text text text text text text text text text text text text text text text text text text
    28. text text text text text text text text text text text text text text text text text text text text text text text text text text text text
    29. text text text text text text text text text text text text text text text text text text text text text text text text text text text text
    30. text text text text text text text text text text text text text text text text text text text text text text text text text text text text
    31. text text text text text text text text text text text text text text text text text text text text text text text text text text text text
    32. text text text text text text text text text text text text text text text text text text text text text text text text text text text text
    33. text text text text text text text text text text text text text text text text text text text text text text text text text text text text
    34. text text text text text text text text text text text text text text text text text text text text text text text text text text text text
    35.  
    36.                    
    37. <?php
    38. echo '1111';
    39. flush();
    40. sleep(5);
    41. echo '<h1>111111111111111111</h1>';
    тут выводится часть текста, примерно 4кб, затем ожидается 5 сек, затем выводится остальная часть текста+ пхп вывод.

    странная логика. буфер заполнился до 4кб и сам очистился, но если явно заставить его очиститься, то буфер не очищается
     
  6. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Всё правильно. Через ini_set не получится отключить буферизацию потому, что этот параметр считывается в момент запуска PHP, ДО того, как php сможет выполнить любой скрипт. А берёт он этот параметр из php.ini, в котором по умолчанию буфер установлен размером 4096 байт.
    Вот в php.ini вы можете отключить буферизацию. Но тогда она отключится вообще для всего, что не самый лучший вариант.
    В php.ini смотрите параметр output_buffering.

    Добавлено спустя 1 минуту 41 секунду:
    Вот, если интересно, почитайте http://habrahabr.ru/company/mailru/blog/248573/
     
  7. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ну и все же для сайта в интернете это неправильный подход. отдал завершенную страницу с аяксом или рефрешем и ок. а дилеи делать в передаче это как бы сама обработка будет досить сервак плюс канал данных будет неестественным образом использоваться.