class OutBufferFilter {
function OutBufferFilter() {
if( @ob_start( array(&$this, 'filter') ) ) {
register_shutdown_function( array(&$this, 'shutdown') );
}
}
function filter( $chunk, $mode ) {
return(
str_replace( '> <', '><',
ereg_replace( "[ \t\r\n]{2,}", ' ',
$chunk
)
)
);
}
function shutdown() {
while( @ob_end_flush() );
}
}
Понятное дело, что метод filter не идеален, но на том HTML-коде который есть у меня он работает (в дизайне не используется теги типа pre)
Потом была добавлена компрессия gzip-ом:
class OutBufferFilterGZ extends OutBufferFilter {
var $use_gzhandler = false;
function OutBufferFilterGZ() {
$this->use_gzhandler = function_exists('ob_gzhandler');
if( @ob_start( array(&$this, 'filter') ) ) {
register_shutdown_function( array(&$this, 'shutdown') );
}
}
function filter( $chunk, $mode ) {
return(
$this->use_gzhandler ?
ob_gzhandler( parent::filter( $chunk ), $mode ) :
parent::filter( $chunk )
);
}
}
Потом класс был расширен на предмет того что-бы кешировать полученные страницы в memcached-е, и если в качестве frontend-а используется nginx, то контент отдавался без участия php, а напрямую из memecache
class OutBufferCached extends OutBufferFilterGZ {
var $memcache = false;
var $content = '';
var $timeout = 10;
function key() {
global $_SERVER;
return( ( isset( $_SERVER )
and isset( $_SERVER["REQUEST_METHOD"] )
and $_SERVER["REQUEST_METHOD"] == 'GET'
) ?
( 'pda:html:'
. (isset( $_SERVER["SCRIPT_NAME"] ) ? $_SERVER["SCRIPT_NAME"] : '')
. (isset( $_SERVER["PATH_INFO"] ) ? $_SERVER["PATH_INFO"] : '' )
. '?'
. (isset( $_SERVER["REQUEST_URI"] ) ? $_SERVER["REQUEST_URI"] : '' )
) :
''
);
}
function OutBufferCached( $memcache = false ) {
$key = $this->key();
if( !empty($key) and $memcache and @$memcache->getVersion() !== false ) {
$this->memcache = $memcache;
$this->content = $this->memcache->get( $key );
if( $this->content !== false ) {
$this->shutdown( false );
exit();
}
else {
$this->content = '';
}
}
if( @ob_start( array(&$this, 'filter') ) ) {
register_shutdown_function( array(&$this, 'shutdown') );
}
}
function filter( $chunk, $mode ) {
$this->content .= parent::filter( $chunk, $mode );
return(null);
}
function shutdown( $store = true ) {
parent::shutdown();
$this->output();
if( $store ) {
$key = $this->key();
if( $this->memcache and !empty($key) and $this->timeout ) {
$this->memcache->set(
$key,
$this->content,
MEMCACHE_COMPRESSED,
$this->timeout
);
}
}
$this->content = '';
}
function output() {
echo $this->content;
flush();
}
function timeout( $t = 10 ) {
$this->timeout = $t;
}
function nocache() {
$this->timeout( 0 );
}
}
Все тестировалось на PHP4 и PHP5, в качестве http-сервера использовалось: apache, nginx + php/fastCGI - пока проблем не возникло.
Собственно хотелось-бы узнать насколько интересен изобретенный мною велосипед ?

28 комментариев:
[url=http://wmtraffs.ru/]WMTraffs.ru[/url] - зарабатывай баксы, разставляя ссылки с этой партнёрке
Сайт WMTraffs.ru предоставляет Вам возможность зарабатывать на на ссылках, без своего сайта. Такженаша партнерская программа предлагает покупку трафика с сайтов сети интернет технологий popunder, clickunder, растяжка в шапке, обычные баннера.
Племяннице моего мужа исполняется четыре годика, размышляем, что презентовать на ДР порекомендуйте, что занимательно в таком возрасте детям. У нее обожаемая игрушка - умный щенок, намереваемся, может презентовать медведя Куби www.sweetwear.ru. Или посоветуйте что-нибудь ещё.
Какая познавательная статья вышла! Респект автору! :)
[url=http://allmet.org]Веселые[/url] [url=http://avto-shop.biz]истории[/url] [url=http://jmarket.info]экран[/url] [url=http://otzv.net]покажет наш[/url] [url=http://vgashop.net]веселые истории[/url] [url=http://tvparty.biz]в журнале[/url] [url=http://vybory2012.com]ералаш[/url]
[color=#6699cc]Артисты на праздник [url=http://dejavu-group.ru/artist.php]Дежа вю[/url] - это коллектив профессиональных вокалистов и музыкантов на праздник.
[url=http://dejavu-group.ru/index.php]Deja Vu[/url]- законодатель в области музыкального оформления торжеств, музыкальных мероприятий, корпоративок .
В репертуаре музыкантов на праздник Deja Vu около 3 тыс. произведений.
Живая музыка. Поп, хиты 70-80-90-х, диско, джаз, ретро, современная музыка, европейские хиты, фоновая музыка, шансон .
Артисты на праздник Dejavu-group располагает мощной качественной аппаратурой, которая позволяет наполнить плотным и приятным уху звуком как маленькое помещение (фуршет), так и огромное помещение (корпоратив до 1000 человек).
Андрей +7 910 483 8294, Игорь +7 916 623 4047 [/color]
Good day, sun shines!
There have been times of troubles when I felt unhappy missing knowledge about opportunities of getting high yields on investments. I was a dump and downright pessimistic person.
I have never imagined that there weren't any need in large starting capital.
Nowadays, I feel good, I started to get real money.
It's all about how to select a proper companion who utilizes your money in a right way - that is incorporate it in real deals, parts and divides the income with me.
You may ask, if there are such firms? I'm obliged to tell the truth, YES, there are. Please get to know about one of them:
http://theinvestblog.com [url=http://theinvestblog.com]Online Investment Blog[/url]
Не знаеш который час в твоём городе? мм.. есть cупер предложение по порталу http://www.Pi7.ru и ...
Думаю вам понравится у меня.
[url=http://www.pi7.ru/video/137-porno-video.html]Порно видео[/url]
[url=http://www.pi7.ru/video/136-grubo-derzko-neozhidanno.html]Грубо дерзко неожиданно[/url]
[color=#6699cc]
Как дела? Может-быть... есть cупер мысль по[url=http://www.pi7.ru] видео[/url] порталу Думаю вам понравится
[url=http://www.pi7.ru]половое созревание у девочек видео скачать [/url]
aнекдот для разнообразия :)
Вернулся крестьянин в глухую деревню з Столицы. Собралось всё селщо.
Сидят, выпивают потихоньку.
Путешестевнник рссказывает:
- Был в таком магазине интересгом "еСкс-шоп" назыцвается! Ну и магаизн, скажу я вам!.. Девки надюувыне продаются!
Тут самаы бойкая на деревне тётка и спрашивает:
- А муики надувные есть?
Мужик:
- Скажу честино - муызиков не видел. Может, ен завезли? Но запчастей к ним - до е#ен...
Я 7 часов блуждала по сети, порка не вышела на ваш фоорум! Думаю, я здесь останусь надолго!
рошу прощения за опечтки.... очень малеьнкая клавиатура у PDA!
[/color]
Восхищен
Мне вот кажется, что такое написать мог то ли креативный гений, то ли героиновый наркоман :(
У нас в Дагестане за такие слова могут и камням изакидать :(
Не очень люблю такие тексты %:(
В Вашей RSS нельзя получать полные тексты записей, что ли?
Логотип мне нравится:)
У Вас долго загружается блог - видимо, хостинг плоховат
Об этом уже писал кто-то из моих ЖЖ-френдов :(
Прошу прощения за оффтопик.
Вы продаете сквозные ссылки с сайта? Если да, свяжитесь со мной, плз!
На словах ты Лев Толстой, а не деле ... простой!
На словах ты Лев Толстой, а не деле ... простой!
На словах ты Лев Толстой, а не деле ... простой!
На словах ты Лев Толстой, а не деле ... простой!
А сегодня день архивного работника. У вас на сайте есть "Архив"? Можете праздновать! :))
А сегодня день архивного работника. У вас на сайте есть "Архив"? Можете праздновать! :))
У нас в жж за такой пост бы закидали какашками в каментах:)
У нас в жж за такой пост бы закидали какашками в каментах:)
Подскажите, а у вас сквозную ссылку купить можно? Если да, сообщите цену на мыло, пожалуйста?
Подскажите, а у вас сквозную ссылку купить можно? Если да, сообщите цену на мыло, пожалуйста?
Хорошая статья. Действительно было интересно почитать. Не часто такое и встречается та.Наверное стоит подписаться на ваше RSS
Отправить комментарий