Перейти к содержимому

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

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

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

Функция ob_implicit_flush() переключает режим неявной очистки. При включении PHP автоматически вызывает ob_flush() после каждой инструкции echo или print. В современных версиях PHP эта функция возвращает void. Кроме того, веб-серверы (например, Apache или PHP-FPM) часто буферизуют вывод независимо, поэтому вам всё ещё может потребоваться вызвать flush(), чтобы данные немедленно достигли браузера.

Как использовать функцию ob_implicit_flush()

Использование функции ob_implicit_flush() довольно просто. Ниже приведён её синтаксис:

Синтаксис функции PHP ob_implicit_flush()

php
ob_implicit_flush(bool $flag = true): void;

Ниже приведён пример, демонстрирующий включение неявной очистки и обработку очистки:

Как использовать функцию ob_implicit_flush()?

php
<?php

ob_start();
ob_implicit_flush(true);
echo "This will be flushed automatically";
flush();
sleep(5);
ob_end_clean();

В этом примере ob_start() инициализирует буфер вывода. Вызов ob_implicit_flush(true) включает автоматическую очистку. Вызов flush() гарантирует, что вывод обойдёт буферы веб-сервера и немедленно достигнет браузера. Вызов sleep(5) демонстрирует, что браузер получает сообщение до завершения работы скрипта. Наконец, ob_end_clean() отбрасывает любое оставшееся содержимое буфера. Обратите внимание, что при активном режиме неявной очистки вы всё ещё можете вручную вызывать ob_flush(), если требуется дополнительный контроль.

Заключение

Функция ob_implicit_flush() предоставляет простой способ управления поведением буферизации вывода в PHP. Понимая её тип возврата void и взаимодействие с flush() и серверными буферами, вы сможете эффективно управлять выводом в реальном времени для долго выполняющихся скриптов или индикаторов прогресса.

Практика

Что делает ob_implicit_flush(1) в PHP?

Считаете ли это полезным?

Предпросмотр dual-run — сравните с маршрутами Symfony на продакшене.