Вобщем, чуток покопался в исходниках форума phpBB и увидел там нечто похожее на возможность паковать gzip'ом исходящую страничку и передавать её клиенту. Соответсвенно возник вопрос :) Я всё правильно понял? Если да, то как это работает и с какими клиентами? Если я правильно всё понял, то это обалденная фича для насыщенных текстовой инфой сайтов.
>Вобщем, чуток покопался в исходниках форума phpBB и увидел там нечто похожее
>на возможность паковать gzip'ом исходящую страничку и передавать её клиенту. Соответсвенно
>возник вопрос :) Я всё правильно понял? Если да, то как
>это работает и с какими клиентами?да в данном случае паковать контент будет php. это работает со всеми новыми браузерами. опера, мозилла, эксплорер (только у этого дятла как обычно проблемы с русской кодировкой)
>Если я правильно всё понял,
>то это обалденная фича для насыщенных текстовой инфой сайтов.еще один открыл секрет полишинеля :-))
а еще есть mod_gzip ;-))
>да в данном случае паковать контент будет php. это работает со всеми
>новыми браузерами. опера, мозилла, эксплорер (только у этого дятла
>как обычно проблемы с русской кодировкой)То есть если gzip'ить, то лучше, чтобы контент сайта был в cp1251?
>>Если я правильно всё понял,
>>то это обалденная фича для насыщенных текстовой инфой сайтов.
>
>еще один открыл секрет полишинеля :-))не стоит издеваться :) каждый открывает для себя что-то новое когда-нибудь :) мне не каждый день доводиться апачи настраивать, например ;)
>а еще есть mod_gzip ;-))
а подробней можно?
Взял с сайта www.luxuru.comНиже изображена схема HTML документа, который использует алгоритм сжатия. Схема поделена на 3 болка:
<?include('gzсomp.php'); ?>
тело HTML странички
<?gzdocout(); ?>Первый блок находиться в самом начале HTML документа и включает в документ файл, который отвечает за сжатия HTML данных. Во втором блоке находиться тело HTML документа (его контекст). Третий блок запускает процедуру сжатия.
Алгоритм сжатия
ob_start();
ob_implicit_flush(0);
// Проверка возможности использования алгоритма сжатия functionCheckCanGzip(){
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(); ?>
Сам не пробовал, но по идее должно работать
Может, конечно, я чего-то не понял в посте. Но, по-моему, средставми ПхП можно сделать это вот так
http://ru2.php.net/manual/en/function.ob-gzhandler.php
Насчет ПХПББ -- там же в админке есть какая-то ссылка типа "отдавать gzip/отдавать plain text", там, вроде как, не надо ничего дописывать?Проблем с кодировками у эксплорера и корректного mod_deflate -- не встречал ни разу. В общем, у меня не было таких проблем
>>да в данном случае паковать контент будет php. это работает со всеми
>>новыми браузерами. опера, мозилла, эксплорер (только у этого дятла
>>как обычно проблемы с русской кодировкой)
>
>То есть если gzip'ить, то лучше, чтобы контент сайта был в cp1251?не критично. но эксплореру нужно сказать в метатэге какая кодировка у документа. т.к. сам он не поймет (IE6)
>>еще один открыл секрет полишинеля :-))
>
>не стоит издеваться :) каждый открывает для себя что-то новое когда-нибудь :)
>мне не каждый день доводиться апачи настраивать, например ;)я пошутил ;-)
>>а еще есть mod_gzip ;-))
>
>а подробней можно?в случае твоего форума - компрессирует движок PHP. а можно компрессировать всю статику через апач с помощью mod_gzip. с кодировками - те же грабли.
>>>а еще есть mod_gzip ;-))
>>а подробней можно?
>в случае твоего форума - компрессирует движок PHP. а можно компрессировать всю
>статику через апач с помощью mod_gzip. с кодировками - те же
>грабли.а еще есть mod_deflate