PHP4.0 предоставляет набор функций буферизации вывода. Поддержка буферизации вывода позволяет писать функции, которые оборачивают функции вокруг сжатых буферов. Поддержка буферизации вывода в PHP4 позволяет сохранять информацию заголовка HTML независимо от того, выводится ли тело HTML. Но в PHP информация заголовка ((header(), тип контента и файлы cookie) не буферизуется.
В процессе использования PHP неизбежно использование заголовков и
setcookie две функции, эти две функции отправят часть информации заголовка файла в браузер, но если есть какие-либо выходные данные (включая пустые выходные данные, такие как пробелы, возвраты каретки и переводы строк) перед использованием этих двух функций, возникнет ошибка. по запросу, подсказка выглядит следующим образом: «Заголовок уже готов к отправке»! . В PHP 4.0 было добавлено несколько функций для управления буфером. Использование этих функций может помочь нам решить множество проблем.
Название функции Формат функции Описание функции
Flushlush() выводит содержимое буфера и удаляет его. Эта функция часто используется и очень эффективна.
ob_start void ob_start(void) Открыть выходной буфер. Когда буфер активен, вся информация заголовка, не относящаяся к файлу, из программы PHP не отправляется, а сохраняется во внутреннем буфере. Чтобы вывести содержимое буфера, вы можете использовать ob_end_flush() или ob_end_clean() для вывода содержимого буфера.
ob_get_contents string ob_get_contents(void) Возвращает содержимое внутреннего буфера. Эта функция возвращает содержимое текущего буфера или FALSE, если выходной буфер не активен.
ob_get_length int ob_get_length(void) Возвращает длину внутреннего буфера. Эта функция возвращает длину текущего буфера; аналогично ob_get_contents, если выходной буфер не активен. Возвращает ЛОЖЬ.
ob_end_flush void ob_end_flush(void) Отправляет содержимое внутреннего буфера в браузер и закрывает выходной буфер. Эта функция отправляет содержимое выходного буфера (если есть).
ob_end_clean void ob_end_clean(void) Удалить содержимое внутреннего буфера и закрыть внутренний буфер. Эта функция не выводит содержимое внутреннего буфера!
ob_implicit_flush void ob_implicit_flush ([int flag]) Включает или выключает абсолютную очистку. Любой, кто использовал Perl, знает значение $|=x. Эта строка может открывать/закрывать буфер, и функция ob_implicit_flush аналогична этой. по умолчанию — закрыть буферную область, включить абсолютный вывод.
2. Пример анализа:
1. Используйте функции управления буфером для предотвращения ошибок при отправке информации в заголовке файла.
< // приглашение PHP
ob_start(); //Открываем буфер
echo "Добро пожаловать /n"; //вывод;
header("location:next.php"); //Перенаправляем браузер на next.php
?>
Если ob_start удален, PHP выдаст ошибку в строке 4 файла, и появится сообщение об ошибке «Заголовок был готов к отправке». Однако, если ob_start добавлен, ошибка не появится. Причина в том, что при удалении ob_start. буфер открыт, ошибка после эха. Символы не будут выводиться в браузер, а останутся в буфере сервера. Они не будут выводиться до тех пор, пока вы не используете флеш или ob_end_flush, поэтому ошибки в заголовке файла не будет. был выведен!
2. Сохраните выходные данные (это классический вариант использования).
Предположим, вы хотите узнать информацию о выводе на экран клиента, такую как результаты вывода функций и т. д., и эта выходная информация будет различаться в зависимости от клиента. Мы можем использовать функцию <?phpinfo(); ?> для получения информации о настройках сервера, но что, если мы хотим сохранить вывод функции phpinfo()? Раньше не было контроля буфера, можно сказать, что не было вообще никакой возможности, но с контролем буфера мы легко можем решить эту проблему.
<?
ob_start(); //Открываем буфер
phpinfo(); //Используем функцию phpinfo
$info=ob_get_contents(); //Получаем содержимое буфера и присваиваем его $info;
$file=fopen('phpinfo.txt','w'); //Открываем файл phpinfo.txt
fwrite($file,$info); //Записываем информацию в phpinfo.txt;
fclose($file); //Закрываем файл phpinfo.txt;
?>
Используя описанный выше метод, вы можете сохранить информацию phpinfo разных пользователей. Раньше это было невозможно! Аналогично, буферный метод можно использовать для сохранения задач, которые сложно выполнить обычными методами. На самом деле это метод преобразования некоторых «процессов» в «функции».