Ob clean: примеры (PHP)
ob_clean: boolPHP функция 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 для работы с потоком ответа используется объект 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_clean() не имеет эффекта.
Код:
<?php
ob_start();
echo 'Текст';
ob_end_clean();
ob_clean(); // Ничего не делает
?>Результат:
(пустой вывод)
Изменения в версиях PHP
В PHP 8.0.0 функция ob_clean() больше не возвращает false при отсутствии активного буфера, а вместо этого вызывает ошибку уровня E_WARNING. В более ранних версиях она могла молча возвращать false.
Расширенные примеры
Код:
<?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
ob_start();
echo 'Внешний буфер. ';
ob_start();
echo 'Внутренний буфер. ';
ob_clean(); // Очищает только внутренний буфер
echo 'Новый внутренний текст. ';
$inner = ob_get_clean();
echo $inner;
$outer = ob_get_clean();
echo $outer;
?>Результат:
Внешний буфер. Новый внутренний текст.
Код:
<?php
function callback($buffer) {
return strtoupper($buffer);
}
ob_start('callback');
echo 'текст для преобразования';
ob_clean(); // Очищает буфер, callback не вызывается
echo 'новый текст';
ob_end_flush();
?>Результат:
НОВЫЙ ТЕКСТ