8.4. Буферизация вывода
Команды буферизации вывода дополнительно к буферизации Web-сервера добавляют свой уровень буферизации под управлением PHP. Это может привести к незначительному снижению производительности, но такова цена за дополнительное управление.
При вызове функции ob_start весь вывод таких функций, как print и echo, задерживается в буфере, который представляет собой большую область памяти. Содержимое буфера можно переслать в браузер с помощью функции ob_end_flush или удалить его с помощью функции ob_end_clean. Как говорилось в главе 7, "Операции ввода-вывода и доступ к диску", заголовки не могут отправляться после того, как была отправлена первая часть содержимого. Поэтому эти функции позволяют избегать ошибок, которые возникают из-за отправки заголовков после содержимого.
ob_clean()
Эта функция удаляет содержимое буфера вывода, не прекращая буферизацию вывода. Новое поступающее содержимое опять будет накапливаться в буфере.
ob_end_clean()
Функция ob_end_clean завершает буферизацию вывода и удаляет содержимое из буфера. В браузер не отсылается ничего.
ob_end_flush()
Функция ob_end_flush завершает буферизацию вывода и отправляет содержимое буфера в браузер.
ob_flush()
Функция ob_flush отправляет содержимое буфера в браузер и очищает буфер. string ob_get_clean()
Функция ob_get_clean возвращает содержимое буфера в браузер и очищает буфер. Аналогичного результата можно добиться путем вызова функции ob_getcontents и последующего вызова функции ob_clean.
string ob_get_flush()
Функция ob_get_flush возвращает содержимое буфера, отправляет его в браузер и очищает буфер. Аналогичного результата можно добиться с помощью вызова функции ob_getcontents и последующего вызова функции ob_flush.
string ob_get_contents()
Функция ob_get_contents возвращает содержимое буфера вывода. integer ob_get_length()
Эта функция возвращает количество байтов в буфере вывода.
integer ob_get_level()
Функция ob_get_level возвращает уровень вложения буфера вывода. Каждый вызов ob_start начинается с буфера вывода, вложенного во внешний буфер вывода. Вне любого вызова функции ob_start эта функция возвращает 1.
array ob_get_status(boolean full)
Функция ob_get_status возвращает массив, описывающий текущий статус буферизации вывода. По умолчанию он возвращает ассоциативный массив со следующими элементами: level, type, status, name, del. Если для аргумента full задано значение TRUE, возвращаемым значением является массив, проиндексированный по уровню вложения. На момент написания этой книги данная функция находилась на стадии эксперимента.
ob_gzhandler(string buffer, integer mode)
Функция ob_gzhandler возвращает заданный буфер после его обработки с помощью алгоритма gzip. Подразумевается, что она должна использоваться в качестве дескриптора функции ob_start.
ob_iconv_handler(string buffer, integer mode)
Функция ob_iconv_handler преобразует текст из внутренней кодировки символов во внешнюю. Подразумевается, что она должна использоваться в качестве дескриптора функции ob_start. Этот дескриптор появляется благодаря использованию расширения iconv. С помощью функции iconv_set_encoding можно задать кодировку, которую использует дескриптор. Узнать текущую кодировку можно посредством функции iconv_get_encoding. С помощью функции iconv можно закодировать отдельные строки.
ob_implicit_flush(boolean on)
Функция ob_implicit_flush вызывает сброс буфера после любой команды, создающей вывод.
array ob_list_handlers()
Функция ob_list_handlers возвращает массив имеющихся дескрипторов. ob_start(string callback)
Функция ob_start (листинг 8.6) включает режим буферизации вывода. В этом буфере сохраняется весь текст, отправленный функцией print и аналогичными функциями. Он не будет отправлен в браузер до тех пор, пока не будет вызвана функция ob_end_flush. Кроме того, по завершении работы сценария сбрасывается весь буфер.
Необязательный аргумент callback позволяет пропустить весь вывод через пользовательскую функцию. Эта функция должна принимать и возвращать строку.
Листинг 8.6. Функция obstart
<?php
//начать буферизацию вывода ob_start();
?>
<html> <head>
<title>ob_start</title>
</head>
<body>
<?php
print("Начиная с этого места ");
print(strlen(ob_get_contents()));
print(" символы размещаются в буфере .<br>n"),-
?>
</body> </html> <?php
// добавить проверочный заголовок header("X-note: COREPHP"); // сбросить содержимое ob_end_flush();
?>
ТОП-10 популярных
Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...
БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Компьютер для гурманов.«Эксимер ДМ»
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...
В дополнение к календарным типам, предназначенным для хранения даты и времени отдельно, MySQL также поддерживает гибридные типы данных DATETIME и...
Вообще, к изменению настроек сервера прибегают очень редко. В MySQL программа заранее настроена так, чтобы соответствовать самым распространенным и основным...
PHP. Браузер ввода-вывода. Часть Четвёртая.
28-12-2009
<< Предыдущая статья | Следующая статья >> |
PHP. Браузер ввода-вывода. Часть Третья. | PHP. Браузер ввода-вывода. Часть Пятая. |