Ob clean: примеры (PHP)

Функция ob_clean для управления буфером вывода в PHP
Раздел: Буферизация вывода
ob_clean: bool

PHP функция ob_clean

Функция ob_clean() в PHP предназначена для очистки (стирания) содержимого текущего буфера вывода, при этом сам буфер не уничтожается, и его работа продолжается. Ее использование актуально при включенной буферизации вывода с помощью функций ob_start() или директивы output_buffering.

Когда используется

Функция применяется в сценариях, где требуется динамически управлять выводимым содержимым. Типичные случаи: обработка ошибок перед отправкой ответа, предотвращение случайного вывода, изменение формата вывода (например, с HTML на JSON) в середине скрипта.

Аргументы и возвращаемое значение

Функция не принимает параметров. Возвращает true в случае успеха, false при возникновении ошибки или если буферизация не активна.

Примеры использования

Очистка буфера перед выводом нового содержимого

Код:

<?php
ob_start();
echo 'Этот текст будет удален';
ob_clean();
echo 'Новый текст';
ob_end_flush();
?>

Результат:

Новый текст
Попытка очистки при неактивном буфере

Код:

<?php
// Буферизация не запущена
$result = ob_clean();
var_dump($result);
?>

Результат:

bool(false)

Похожие функции в PHP

Очищает буфер и отключает буферизацию. Применяется, когда дальнейший вывод не требует буферизации.

Получает содержимое текущего буфера, очищает его и отключает буферизацию. Полезно для сохранения вывода в переменную.

Отправляет содержимое текущего буфера на вывод и очищает его, но буфер остается активным. Используется для инкрементального вывода данных.

Получает содержимое буфера без его очистки или отключения. Позволяет обработать данные перед выводом.

Типичные ошибки

Очистка без активного буфера

Попытка вызова функции при отключенной буферизации приводит к ошибке уровня предупреждения и возврату false.

Код:

<?php
ob_clean();
echo 'Текст после ошибки';
?>

Результат:

Warning: ob_clean(): failed to delete buffer. No buffer to delete
Текст после ошибки
Использование после ob_end_clean()

После завершения и очистки буфера вызов ob_clean() не имеет эффекта.

Код:

<?php
ob_start();
echo 'Текст';
ob_end_clean();
ob_clean(); // Ничего не делает
?>

Результат:

(пустой вывод)

Изменения в версиях PHP

В PHP 8.0.0 функция ob_clean() больше не возвращает false при отсутствии активного буфера, а вместо этого вызывает ошибку уровня E_WARNING. В более ранних версиях она могла молча возвращать false.

Расширенные примеры

Динамическое изменение типа ответа

Код:

Пример php
<?php
ob_start();
echo '<html>Ошибочный HTML</html>';
if ($error) {
    ob_clean();
    header('Content-Type: application/json');
    echo json_encode(['error' => true]);
}
ob_end_flush();
?>
Вложенная буферизация с частичной очисткой

Код:

Пример php
<?php
ob_start();
echo 'Внешний буфер. ';
ob_start();
echo 'Внутренний буфер. ';
ob_clean(); // Очищает только внутренний буфер
echo 'Новый внутренний текст. ';
$inner = ob_get_clean();
echo $inner;
$outer = ob_get_clean();
echo $outer;
?>

Результат:

Внешний буфер. Новый внутренний текст.
Использование с callback–функцией

Код:

Пример php
<?php
function callback($buffer) {
    return strtoupper($buffer);
}
ob_start('callback');
echo 'текст для преобразования';
ob_clean(); // Очищает буфер, callback не вызывается
echo 'новый текст';
ob_end_flush();
?>

Результат:

НОВЫЙ ТЕКСТ

Альтернативы в других языках

Ob clean в Python

В Python нет прямой аналогии, так как буферизация вывода управляется на уровне стандартного потока sys.stdout или фреймворков.

import sys
sys.stdout.flush()  # Отправка буфера, но не очистка
# Для сброса вывода можно создать новый StringIO объект
JavaScript (Node.js)

В серверном JavaScript для работы с потоком ответа используется объект response.

// Express.js
response.write('Текст');
// Очистка буфера ответа не предусмотрена, обычно управляют данными до отправки.

Ob clean в MySQL

В SQL отсутствует понятие буферизации вывода на уровне запросов.

PHP ob_clean function comments

En
Ob clean Clean (erase) the output buffer