ob_gzhandler

  • Автор темы Юрий
  • Дата начала

Юрий

Guest
ob_gzhandler

Создаю свой обработчик буфера

PHP:
function ob_line($text) {
	return preg_replace('/[\t\r\n\s]+/s',' ', trim($text));
}

ob_start("ob_line");
хотелось бы сжать еще контент, по типу как это делает
PHP:
ob_start("ob_gzhandler");
Что посоветуете? THX.
 

Юрий

Guest
Nimous
Тогда не смогу использовать свой обработчик.
 

kvf77

Red Devil
Юрий

а нафига нужен твой обработчик? толку от него
при использовании компрессии так вообще пушкой по воробьям
 

Юрий

Guest
Автор оригинала: kvf77
Юрий

а нафига нужен твой обработчик? толку от него
при использовании компрессии так вообще пушкой по воробьям
В данном случае да, но это для примера. Обработчик может выполнять куда более сложные действия, чем вырезание пробелов. Как быть в таком случае?

-~{}~ 07.11.05 11:57:

kvf77
P.S. к тому же и пробелов в после работы скрипта может оказаться гораздо(!) больше , чем Вы предполагаете, поэтому думаю, нет необходимости сжимать бесчисленные пробелы, а потом их распаковывать, после чего отдавать на парсинг браузеру. Это все время и ресурсы...
 

SiMM

Новичок
> Тогда не смогу использовать свой обработчик.
Откуда такие далекоидущие выводы?
[m]ob_start[/m]
 

SiMM

Новичок
Так сложно прочесть ОДНУ страницу текста?
Output buffers are stackable, that is, you may call ob_start() while another ob_start() is active. Just make sure that you call ob_end_flush() the appropriate number of times. If multiple output callback functions are active, output is being filtered sequentially through each of them in nesting order.
 

kruglov

Новичок
Даже можно не stackить, с помощью ob_get_contents берем контент и по новой. И так 1000 раз.
 

Юрий

Guest
SiMM
В таком случае, как я понял, придется ob_start запускать дважды с разными обработчиками?
Может есть способ покороче?
 

SiMM

Новичок
> Даже можно не stackить, с помощью ob_get_contents берем контент и по новой.
Это уже извращением попахивает - делать
PHP:
# ...
$str = ob_get_contents();
ob_start('new_handler');
echo $str;
# ...
Тогда уж можно было сразу делать
PHP:
# ...
$str = ob_get_contents();
$str = new_handler($str);
#...
PS: мелкие детали в коде опущены - он носит лишь демонстративный характер.

> Может есть способ покороче?
Чем? Это ж надо ляпнуть, даже не попытавшись врубиться в суть написанного в мануале.
 

Юрий

Guest
Мне нужно сжать предварительно пропарсенный контент.

Вариант
PHP:
# ... 
$str = ob_get_contents(); 
$str = new_handler($str); 
#...
где new_handler это
PHP:
ob_gzhandler()
у меня не работает.
 

kruglov

Новичок
SiMM
Я к тому, что хотя б до такого "извращения" можно и додуматься.
 

Юрий

Guest
kruglov
Не все такие умные, к сожалению...
 

Юрий

Guest
kruglov
:) Спасибо за совет, но если можно, прочтите суть проблемы в самом верху.
 

Profic

just Profic (PHP5 BetaTeam)
Повторю еще раз:
Output buffers are stackable, that is, you may call ob_start() while another ob_start() is active. Just make sure that you call ob_end_flush() the appropriate number of times. If multiple output callback functions are active, output is being filtered sequentially through each of them in nesting order.
 

Юрий

Guest
Profic
Пример кода в пару строк привести можно? Не работает у меня!!! Или то, или то.... :(
 

SiMM

Новичок
Юрий, почему бы ТЕБЕ не привести код, который у тебя не работает? Тем более, что правила обязывают.
 

Юрий

Guest
SiMM
Всем спасибо, более-менее разобрался! :)

Как я понял
PHP:
ob_start("ob_gzhandler");
переформатирует данные из буфера. Поэтому в данном контексте ф-я ob_line не является необходимой и поэтому ее действие не заметно.
 
Сверху