Сжатие страниц на PHP
Основное назначение скрипта - сжатие страниц, передаваемых сервером браузеру. У меня в среднем сжималось в 4 раза.
Одно "НО": Не ставьте уровень сжатия больше 3 - размер не уменьшится, а нагрузка на сервер - еще как.
Скрипт используется следующим образом:
<? include('gzdoc.php'); ?> <HTML> ... the page ... </HTML> <? gzdocout(); ?>
gzdoc.php
<? /* ** Title.........: PHP4 HTTP Compression Speeds up the Web ** Version.......: 1.20 ** Author........: catoc <catoc@163.net> ** Filename......: gzdoc.php ** Last changed..: 18/10/2000 ** Requirments...: PHP4 >= 4.0.1 ** PHP was configured with --with-zlib[=DIR] ** Notes.........: Dynamic Content Acceleration compresses ** the data transmission data on the fly ** code by sun jin hu (catoc) <catoc@163.net> ** Most newer browsers since 1998/1999 have ** been equipped to support the HTTP 1.1 ** standard known as "content-encoding." ** Essentially the browser indicates to the ** server that it can accept "content encoding" ** and if the server is capable it will then ** compress the data and transmit it. The ** browser decompresses it and then renders ** the page. ** ** Modified by John Lim (jlim@natsoft.com.my) ** based on ideas by Sandy McArthur, Jr ** Usage........: ** No space before the beginning of the first '<?' tag. ** ------------Start of file---------- ** |<? ** | include('gzdoc.php'); ** |?> ** |<HTML> ** |... the page ... ** |</HTML> ** |<? ** | gzdocout(); ** |?> ** -------------End of file----------- */ ob_start(); ob_implicit_flush(0); function CheckCanGzip(){ global $HTTP_ACCEPT_ENCODING; if (headers_sent() || 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; } /* $level = compression level 0-9, 0=none, 9=max */ function GzDocOut($level=3, $debug=0){ $ENCODING = CheckCanGzip(); if ($ENCODING){ print "\n<!-- Use compress $ENCODING -->\n"; $Contents = ob_get_contents(); ob_end_clean(); if ($debug){ $s = "<center><font style='color:#C0C0C0; font-size:9px; font-family:tahoma'>Not compress length: ".strlen($Contents)."; "; $s .= "Compressed length: ". strlen(gzcompress($Contents, $level)). "</font></center>"; $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.
25 февраля 2017, 17:38:46
Не могу понять зачем вызывать страницу а потом сжимать, тоже самое наверное.
2.
3 ноября 2015, 12:30:06
Норм работал всё окей
3.
+1 / -0
17 февраля 2006, 22:13:14
Valex, а ты попробуй скажи это хостеру!!!
4.
16 февраля 2006, 13:05:37
Мона в PHP.ini заменить строку:
zlib.output_compression = Off
на:
zlib.output_compression = On
ефект будет куда лутше скриптов :)
zlib.output_compression = Off
на:
zlib.output_compression = On
ефект будет куда лутше скриптов :)
5.
+2 / -0
7 февраля 2006, 15:32:43
какого хрена? в PHP существует встроенный GZIP-обработчик. Просто в начале сценария надо вставить строку
ob_start("ob_gzhandler", 9);
9 - максимальный уровень сжатия. Работает оччень эффективно. Проверял. Итак, наш скрипт будет выглядеть примерно так:
<?ob_start("ob_gzhandler")?>
<html>
<body>
<p>This should be a compressed page.</p>
</html>
<body>
ob_start("ob_gzhandler", 9);
9 - максимальный уровень сжатия. Работает оччень эффективно. Проверял. Итак, наш скрипт будет выглядеть примерно так:
<?ob_start("ob_gzhandler")?>
<html>
<body>
<p>This should be a compressed page.</p>
</html>
<body>
6.
15 сентября 2005, 15:17:10
Лучше отказаться от показа насколько уменьшился файл при сжатие чем сжимать его 2 раза только ради этого. Попробуй проверь насколько система тормозит из-за этой "красоты"
7.
27 июля 2005, 21:18:13
Реально работает, причем на видне с одной стороны и опере/ие6 с другой
8.
10 марта 2005, 00:24:50
небольшая поправка:
function CheckCanGzip(){
if (headers_sent() || connection_aborted()){
return 0;
}
if (strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'x-gzip') !== false) return "x-gzip";
if (strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false) return "gzip";
return 0;
}
Иначе работать отказалось...
function CheckCanGzip(){
if (headers_sent() || connection_aborted()){
return 0;
}
if (strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'x-gzip') !== false) return "x-gzip";
if (strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false) return "gzip";
return 0;
}
Иначе работать отказалось...
9.
16 ноября 2004, 13:43:44
Да я проверил %))
нада чтоб на сервере был Gzip настроин.
27219 жал до
26819
нада чтоб на сервере был Gzip настроин.
27219 жал до
26819
10.
10 ноября 2004, 18:36:20
и че реально работает?