Функция PHP ob_get_flush(): всё, что нужно знать
Узнайте, как работает функция ob_get_flush() в PHP: возвращает содержимое буфера вывода и одновременно отправляет его.
Как разработчику на PHP, вам может потребоваться одновременно получить содержимое буфера вывода и сбросить его. Функция ob_get_flush() — встроенная функция PHP, которая делает и то, и другое за один вызов: возвращает текущее содержимое буфера в виде строки и отправляет его на следующий уровень вывода. В этой статье объясняется, как она работает, что возвращает и когда стоит использовать её вместо других функций управления выводом.
Что такое функция ob_get_flush()?
Буферизация вывода позволяет PHP собирать всё, что вы выводите через echo или print, в памяти, вместо того чтобы немедленно отправлять это в браузер. Вы открываете буфер с помощью ob_start(), записываете в него что нужно, а затем решаете, что делать с захваченным выводом.
ob_get_flush() выполняет три действия за один шаг:
- Получает содержимое активного (верхнего) буфера вывода и возвращает его в виде строки.
- Сбрасывает это содержимое — отправляет его на следующий уровень буфера или в браузер, если других уровней нет.
- Закрывает этот уровень буфера (один уровень вложенности удаляется).
Таким образом, функция является удобным сочетанием ob_get_contents() (чтение) и ob_end_flush() (отправка + закрытие).
Синтаксис
ob_get_flush(): string|falseПараметры
ob_get_flush() не принимает параметров.
Возвращаемое значение
Функция возвращает содержимое верхнего буфера вывода в виде строки. Если буферизация вывода не активна (нет буфера для сброса), она возвращает false и вызывает уведомление. Всегда открывайте буфер с помощью ob_start() перед её вызовом.
Как использовать функцию ob_get_flush()
Схема использования: открыть буфер, записать в него данные, затем вызвать ob_get_flush(), чтобы захватить и освободить его.
<?php
ob_start();
echo "This will be buffered";
// Capture the buffer, flush it to the browser, and close the level.
$output = ob_get_flush();
echo "\nCaptured copy: " . $output;Вывод:
This will be buffered
Captured copy: This will be bufferedЗдесь "This will be buffered" собирается в буфере, а не выводится немедленно. ob_get_flush() возвращает этот текст (так что $output теперь содержит его) и одновременно отправляет его в браузер — именно поэтому фраза появляется дважды: один раз от сброса буфера, второй — от финального echo.
Если при вызове буферизация не активна, вы получите false:
<?php
$output = ob_get_flush(); // No ob_start() was called
var_dump($output); // bool(false)ob_get_flush() и связанные функции
| Функция | Возвращает содержимое? | Отправляет в вывод? | Закрывает буфер? |
|---|---|---|---|
ob_get_flush() | Да (строка) | Да | Да |
ob_end_flush() | Нет (bool) | Да | Да |
ob_get_clean() | Да (строка) | Нет (удаляется) | Да |
ob_get_contents() | Да (строка) | Нет | Нет |
Используйте ob_get_flush(), когда вам нужно одновременно сохранить копию буферизованного вывода (для логирования, проверки или изменения) и отправить его в браузер. Если нужно только отправить — используйте ob_end_flush(); если нужно только захватить без отправки — используйте ob_get_clean().
Заключение
Функция ob_get_flush() извлекает активный буфер вывода в виде строки, одновременно сбрасывая и закрывая его за один вызов. Понимая её пустой список параметров, возвращаемое значение string|false и поведение при закрытии буфера, вы сможете более точно управлять потоками вывода. Для углублённого изучения изучите ob_start() для открытия буферов, ob_get_level() для проверки глубины вложенности и ob_flush() для сброса без закрытия.