|
|
|
| Расскажите про ob_start() как работает, что делает. И стоит ли использовать ob_start ("ob_gzhandler");? нагрузка на сервер увеличивается? | |
|
|
|
|
|
|
|
для: JIEXA
(16.04.2005 в 21:00)
| | Часто требует осуществить задержку вывода страницы в окно браузера. Это может быть связано как необходимостью отправке HTTP-заголовков после использования функций echo() и print(), так и для пост-обработке, например, для реализации шаблонов или подсветки искомых слов при формировании результатов поиска. Для решения этой задачи предназначены функции управления выводом. Данные функции позволяют поместить весь вывод в окно браузера в буфер и отправлять страницу с сервера единым блоком. Буферизация вывода инициализируется функцией ob_start(), которая сообщает интерпретатору PHP, что вывод в окно браузера следует задерживать и размещать во внутреннем буфере. Получить содержимое буфера можно при помощи функции ob_get_contents() которая имеет следующий синтаксис:
string ob_get_contents (void)
Функция возвращает содержимое буфера в строковой переменной.
Очистить буфер можно при помощи функцией ob_end_clean(), которая возвращает true в случае успешного выполнения и false — в противном случае. Ниже приведён пример работы с функциями управления вывода.
<?php
ob_start();
?>
Код гостевой книги. В теле сообщений содержаться ссылки в виде текста.
<?php
// инициируем сессию
session_start();
// занесение содержимого буфера в переменную
$strtmp = ob_get_contents();
// очищение буфера вывода и отключение буферизации вывода
ob_end_clean();
// замена текстовой ссылки ссылкой HTML. Заменяются строки формата
// http://www.ресурс и www.ресурс
$strtmp = preg_replace("#(http://www|www)(\S+)#si",
"<a href=http://www\\2>www\\2</a>",
$strtmp);
// вывод модифицированного содержимого страницы в браузер
echo $strtmp;
?>
|
Весь вывод направляется в буфер, в результате чего появляется возможность вызова функции session_start(), так как клиенту ещё ничего не отправлено. После этого, содержимое буфера переносится в переменную $strtmp, а сам буфер уничтожается функцией ob_end_clean(). С текстом страницы можно совершать различные манипуляции, например, осуществлять в нём замену по регулярному выражению. Отправить текст клиенту можно воспользовавшись функцией echo(). | |
|
|
|
|
|
|
|
для: cheops
(16.04.2005 в 23:26)
| | а ob_start ("ob_gzhandler");? слышал, что она сжимает данные? стоит ли её использовать? | |
|
|
|
|
|
|
|
для: JIEXA
(17.04.2005 в 12:13)
| | В принцие да, но она может быть не настроена на сервере, вообще функции ob_start можно передать и свою функцию обратного вызыва, т.е. произвести замену в тексте, например, с использованием такой функции. | |
|
|
|