Як відключити буферизацію виводу


 

В процесі роботи php-скрипти можуть виводити результати по мірі виконання закладеного в них сценарію або накопичувати дані, чекаючи повного виконання сценарію і завершення роботи скрипта. Вибір одного з цих варіантів залежить від значення, присвоєного в настройках інтерпретатора php змінної, що відповідає за буферизацію виводу даних. Змінити його можна кількома способами.


Інструкція

  1. Якщо відключити буферизацію виводу потрібно для всіх виконуваних на сервері або на сайті php-скриптів, найправильніше зробити це через файл php.ini. При запуску кожного скрипта інтерпретатор мови php читає налаштування з цього файлу конфігурації, тому помістити в нього директиву відключення буферизації виведення результатів роботи скриптів — найбільш оптимальне рішення. Відкрийте файл в будь-якому текстовому редакторі і за допомогою діалогу пошуку знайдіть директиву з назвою output_buffering. Її значенням може бути як целочисленная, так і логічна (On або Off) змінна, тому замість присвоєного за замовчуванням значення впишіть Off або 0. Якщо цієї директиви немає в конфігураційному файлі, додайте в кінець записів додатковий рядок:

    output_buffering = Off
      

  2. При необхідності скасувати буферизацію виводу для скриптів окремої папки або групи вкладених папок, краще зробити це через файл htaccess. Знайдіть його в потрібному каталозі і відкрийте в текстовому редакторі. Якщо такого файлу ще немає, створіть новий. Директива, яку слід додати, аналогічна описаній в попередньому кроці, але перед нею треба помістити позначку про те, що мова йде про одну з настройок php. Повністю цей рядок має виглядати так:

    php_flag output_buffering off

    Створений файл htaccess помістіть у верхню папку ієрархії каталогів, для яких повинна виконуватися директива.
      

  3. Щоб відключити буферизацію в одному окремо взятому php-скрипті, використовуйте одну з вбудованих функцій цієї мови. ob_get_flush () повертає поточний зміст буфера, потім обнуляє його і відключає буферизацію виводу. ob_end_flush () робить те ж саме, але поточний зміст буфера не повертає в викликала її зміну, а відправляє на пристрій виводу. Функція ob_end_clean () просто стирає поточні дані перед відключенням буферизації. Скориставшись однією з цих функцій, не забудьте знову включити буферизацію — для цього призначена функція ob_start ().