Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

PHP_OutputBuffering (неизвестный)
Author Message
неизвестный
Guest





Карма: 388
   поощрить/наказать


PostPosted: Tue Jul 31, 2007 4:12 pm (написано за 1 минуту 12 секунд)
   Post subject: PHP_OutputBuffering
Reply with quote

В вашей книге приведен класс для перехвата выходного потока PHP_OutputBuffering. У меня вопрос, как прикрутить к нему эффективность сжатия? Т.е. шоб cookies создавались со значениями.
Back to top
Неизвестный
Guest





Карма: 388
   поощрить/наказать


PostPosted: Tue Jul 31, 2007 7:24 pm (спустя 3 часа 11 минут; написано за 2 минуты 25 секунд)
   Post subject:
Reply with quote

Ну плыс. Вот вообщем этот класс:
Code (php): скопировать код в буфер обмена
<?php ## Автоматизация вызова ob_end_clean().
// Упрощает перехват выходного потока в скриптах.
// Гарантировано вызывает ob_end_clean() при выходе объекта
// класса за текущую область видимости.
class PHP_OutputBuffering {
  // Содержимое буферов разных уровней.
  private static (www.php.net/static) $buffers = array (www.php.net/array)();
  // Уровень вложенности текущего объекта.
  private $level;
  // Буфер уже был уничтожен (например, выведен в браузер).
  private $flushed;
  // Запускает новый буфер перехвата выходного потока.
  public function __construct($handler=null) {
    // Вначале запоминаем предыдущее содержимое буфера.
    $prevLevel = ob_get_level (www.php.net/ob_get_level)();
    self::$buffers[$prevLevel] = ob_get_contents (www.php.net/ob_get_contents)();
    // Устанавливаем новый буфер для перехвата.
    if ($handler !== null) ob_start (www.php.net/ob_start)($handler); else ob_start (www.php.net/ob_start)();
    // Запоминаем текущий уровень объекта.
    $this->level = ob_get_level (www.php.net/ob_get_level)();
  }
  // Завершает перехват выходного потока.
  public function __destruct() {
    if ($this->flushed) return;
    ob_end_clean (www.php.net/ob_end_clean)();
    unset (www.php.net/unset)(self::$buffers[$this->level]);
  }
  // Отправить буфер в браузер.
  public function flush (www.php.net/flush)() {
    if ($this->flushed) return;
    ob_end_flush (www.php.net/ob_end_flush)();
    unset (www.php.net/unset)(self::$buffers[$this->level]);
  }
  // Возвращает данные в буфере.
  public function __toString() {
    if ($this->flushed) false;
    // Если текущий объект не является активным, то возвращается
    // текст из внутреннего хранилища, а иначе - результат работы
    // ob_get_contents().
    if (ob_get_level (www.php.net/ob_get_level)() == $this->level)
      return ob_get_contents (www.php.net/ob_get_contents)();
    else
      return self::$buffers[$this->level];
  }
}
?>
Сюда нужно включить подобные ф-ции:
Code (php): скопировать код в буфер обмена
//
function ob_saveCookieAfter($s) {
  setcookie (www.php.net/setcookie)("page_size_after", strlen (www.php.net/strlen)($s));
  return $s;
}
//
function ob_saveCookieBefore($s) {
  setcookie (www.php.net/setcookie)("page_size_before", strlen (www.php.net/strlen)($s));
  return $s;
}
Т.е. что бы при вызове $buf = new PHP_OutputBuffering(); , происходило нечто следующее:
Code (php): скопировать код в буфер обмена
ob_start (www.php.net/ob_start)("ob_saveCookieAfter");
ob_start (www.php.net/ob_start)("ob_gzhandler", 9);
ob_start (www.php.net/ob_start)("ob_saveCookieBefore");
Моя вина, с ООП до конца не подружился! Точнее все никак прочитать не могу.
Back to top
Maus
Модератор



Joined: 29 Jun 2003
Posts: 8151
Карма: 271
   поощрить/наказать

Location: пос. Омсукчан Магаданской области

PostPosted: Tue Jul 31, 2007 10:32 pm (спустя 3 часа 7 минут; написано за 11 секунд)
   Post subject:
Reply with quote

Неизвестный wrote:
никак прочитать не могу
проблемы со зрением?
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML