Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: ob_start()
 
 автор: JIEXA   (16.04.2005 в 21:00)   письмо автору
 
 

Расскажите про ob_start() как работает, что делает. И стоит ли использовать ob_start ("ob_gzhandler");? нагрузка на сервер увеличивается?

   
 
 автор: cheops   (16.04.2005 в 23:26)   письмо автору
 
   для: 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().

   
 
 автор: JIEXA   (17.04.2005 в 12:13)   письмо автору
 
   для: cheops   (16.04.2005 в 23:26)
 

а ob_start ("ob_gzhandler");? слышал, что она сжимает данные? стоит ли её использовать?

   
 
 автор: cheops   (17.04.2005 в 12:20)   письмо автору
 
   для: JIEXA   (17.04.2005 в 12:13)
 

В принцие да, но она может быть не настроена на сервере, вообще функции ob_start можно передать и свою функцию обратного вызыва, т.е. произвести замену в тексте, например, с использованием такой функции.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования