URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 1678
[ Назад ]

Исходное сообщение
"Возможно ли передать клиенту gzip'ленный HTML?"

Отправлено .koval , 07-Сен-03 19:13 
Вобщем, чуток покопался в исходниках форума phpBB и увидел там нечто похожее на возможность паковать gzip'ом исходящую страничку и передавать её клиенту. Соответсвенно возник вопрос :) Я всё правильно понял? Если да, то как это работает и с какими клиентами? Если я правильно всё понял, то это обалденная фича для насыщенных текстовой инфой сайтов.

Содержание

Сообщения в этом обсуждении
"Возможно ли передать клиенту gzip'ленный HTML?"
Отправлено Oleg Khimich , 07-Сен-03 20:15 
>Вобщем, чуток покопался в исходниках форума phpBB и увидел там нечто похожее
>на возможность паковать gzip'ом исходящую страничку и передавать её клиенту. Соответсвенно
>возник вопрос :) Я всё правильно понял? Если да, то как
>это работает и с какими клиентами?

да в данном случае паковать контент будет php. это работает со всеми новыми браузерами. опера, мозилла, эксплорер (только у этого дятла как обычно проблемы с русской кодировкой)

>Если я правильно всё понял,
>то это обалденная фича для насыщенных текстовой инфой сайтов.

еще один открыл секрет полишинеля :-))
а еще есть mod_gzip ;-))


"Возможно ли передать клиенту gzip'ленный HTML?"
Отправлено .koval , 07-Сен-03 21:09 
>да в данном случае паковать контент будет php. это работает со всеми
>новыми браузерами. опера, мозилла, эксплорер (только у этого дятла
>как обычно проблемы с русской кодировкой)

То есть если gzip'ить, то лучше, чтобы контент сайта был в cp1251?

>>Если я правильно всё понял,
>>то это обалденная фича для насыщенных текстовой инфой сайтов.
>
>еще один открыл секрет полишинеля :-))

не стоит издеваться :) каждый открывает для себя что-то новое когда-нибудь :) мне не каждый день доводиться апачи настраивать, например ;)

>а еще есть mod_gzip ;-))

а подробней можно?


"Возможно ли передать клиенту gzip'ленный HTML?"
Отправлено zenon , 08-Сен-03 12:28 
Взял с сайта www.luxuru.com

Ниже изображена схема HTML документа, который использует алгоритм сжатия. Схема поделена на 3 болка:

<?include('gzсomp.php'); ?>
тело HTML странички
<?gzdocout(); ?>

Первый блок находиться в самом начале HTML документа и включает в документ файл, который отвечает за сжатия HTML данных. Во втором блоке находиться тело HTML документа (его контекст). Третий блок запускает процедуру сжатия.

Алгоритм сжатия
ob_start();
ob_implicit_flush(0);


// Проверка возможности использования алгоритма сжатия function

CheckCanGzip(){
global $HTTP_ACCEPT_ENCODING;
if (headers_sent() || connection_timeout() || connection_aborted()){      return 0;
}

if (strpos($HTTP_ACCEPT_ENCODING, 'x-gzip') !== false) return "x-gzip";
if (strpos($HTTP_ACCEPT_ENCODING,'gzip') !== false) return "gzip";
return 0;
}

// Процедура сжатия

functionGzDocOut($level=1,$debug=0){
$ENCODING = CheckCanGzip();
if ($ENCODING){
   print "\n\n";
   $Contents = ob_get_contents();
   ob_end_clean();
   if ($debug){
     $s = " Длина без сжатия: ".strlen($Contents);
     $s .= " Длина с сжатием: ".strlen(gzcompress($Contents,$level));
     $Contents .= $s;
   }
   header("Content-Encoding: $ENCODING");
   print "\x1f\x8b\x08\x00\x00\x00\x00\x00";
   $Size = strlen($Contents);
   $Crc = crc32($Contents);
   $Contents = gzcompress($Contents,$level);
   $Contents = substr($Contents, 0, strlen($Contents) - 4);
   print $Contents;
   print pack('V',$Crc);
   print pack('V',$Size);
   exit;
}
else{
   ob_end_flush();
   exit;
}
} ?>


Как использовать этот алгоритм
1. Поместить весь алгоритм в файл :

gzcomp.php

2. В процедуре сжатия GzDocOut, указать уровень сжатия от 0 (не сжимать) до 9 (максимальное сжатие)

3. Как уже говорилось выше надо поставить в самое начало документа (до тэгов HTML) код :

<? include('gzcomp.php'); ?>

4. И в самом конце (после HTML тэгов) вызов на процедуру php сценария :

<?gzdocout(); ?>

Сам не пробовал, но по идее должно работать


"Вполне!"
Отправлено robocomp , 01-Ноя-03 16:41 
Может, конечно, я чего-то не понял в посте. Но, по-моему, средставми ПхП можно сделать это вот так
http://ru2.php.net/manual/en/function.ob-gzhandler.php
Насчет ПХПББ -- там же в админке есть какая-то ссылка типа "отдавать gzip/отдавать plain text", там, вроде как, не надо ничего дописывать?

Проблем с кодировками у эксплорера и корректного mod_deflate -- не встречал ни разу. В общем, у меня не было таких проблем


"Возможно ли передать клиенту gzip'ленный HTML?"
Отправлено Oleg , 08-Сен-03 16:43 
>>да в данном случае паковать контент будет php. это работает со всеми
>>новыми браузерами. опера, мозилла, эксплорер (только у этого дятла
>>как обычно проблемы с русской кодировкой)
>
>То есть если gzip'ить, то лучше, чтобы контент сайта был в cp1251?

не критично. но эксплореру нужно сказать в метатэге какая кодировка у документа. т.к. сам он не поймет (IE6)

>>еще один открыл секрет полишинеля :-))
>
>не стоит издеваться :) каждый открывает для себя что-то новое когда-нибудь :)
>мне не каждый день доводиться апачи настраивать, например ;)

я пошутил ;-)

>>а еще есть mod_gzip ;-))
>
>а подробней можно?

в случае твоего форума - компрессирует движок PHP. а можно компрессировать всю статику через апач с помощью mod_gzip. с кодировками - те же грабли.


"Возможно ли передать клиенту gzip'ленный HTML?"
Отправлено Zerg WereWolf , 01-Ноя-03 14:02 
>>>а еще есть mod_gzip ;-))
>>а подробней можно?
>в случае твоего форума - компрессирует движок PHP. а можно компрессировать всю
>статику через апач с помощью mod_gzip. с кодировками - те же
>грабли.

а еще есть mod_deflate