Взял с сайта 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(); ?>
Сам не пробовал, но по идее должно работать