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

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

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

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

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

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

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 отсутствует понятие буферизации вывода на уровне запросов.

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

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

Попытка вызова функции при отключенной буферизации приводит к ошибке уровня предупреждения и возврату 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();
?>

Результат:

НОВЫЙ ТЕКСТ

PHP ob_clean function comments

En
Ob clean Clean (erase) the output buffer