W3docs

Функция PHP ob_get_flush(): всё, что нужно знать

Узнайте, как работает функция ob_get_flush() в PHP: возвращает содержимое буфера вывода и одновременно отправляет его.

Как разработчику на PHP, вам может потребоваться одновременно получить содержимое буфера вывода и сбросить его. Функция ob_get_flush() — встроенная функция PHP, которая делает и то, и другое за один вызов: возвращает текущее содержимое буфера в виде строки и отправляет его на следующий уровень вывода. В этой статье объясняется, как она работает, что возвращает и когда стоит использовать её вместо других функций управления выводом.

Что такое функция ob_get_flush()?

Буферизация вывода позволяет PHP собирать всё, что вы выводите через echo или print, в памяти, вместо того чтобы немедленно отправлять это в браузер. Вы открываете буфер с помощью ob_start(), записываете в него что нужно, а затем решаете, что делать с захваченным выводом.

ob_get_flush() выполняет три действия за один шаг:

  1. Получает содержимое активного (верхнего) буфера вывода и возвращает его в виде строки.
  2. Сбрасывает это содержимое — отправляет его на следующий уровень буфера или в браузер, если других уровней нет.
  3. Закрывает этот уровень буфера (один уровень вложенности удаляется).

Таким образом, функция является удобным сочетанием 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() для сброса без закрытия.

Практика

Практика
Какова функция ob_get_flush() в PHP?
Какова функция ob_get_flush() в PHP?
Was this page helpful?