Почему у меня не работает вывод php gzip? - PullRequest
1 голос
/ 27 апреля 2011

У меня есть этот код:

<?php
// Include this function on your pages
function print_gzipped_page() {

    global $HTTP_ACCEPT_ENCODING;
    if( headers_sent() ){
        $encoding = false;
    }elseif( strpos($HTTP_ACCEPT_ENCODING, 'x-gzip') !== false ){
        $encoding = 'x-gzip';
    }elseif( strpos($HTTP_ACCEPT_ENCODING,'gzip') !== false ){
        $encoding = 'gzip';
    }else{
        $encoding = false;
    }

    if( $encoding ){
        $contents = ob_get_contents();
        ob_end_clean();
        header('Content-Encoding: '.$encoding);
        print("\x1f\x8b\x08\x00\x00\x00\x00\x00");
        $size = strlen($contents);
        $contents = gzcompress($contents, 9);
        $contents = substr($contents, 0, $size);
        print($contents);
        exit();
    }else{
        ob_end_flush();
        exit();
    }
}

// At the beginning of each page call these two functions
ob_start();
ob_implicit_flush(0);

// Then do everything you want to do on the page
?>
<html>
<body>
<p>This should be a compressed page.</p>
</html>
<body>
<?

// Call this function to output everything as gzipped content.
print_gzipped_page();
?>

Но когда я просматриваю исходный код страницы, я не вижу сжатый код. Что не так?

Ответы [ 5 ]

6 голосов
/ 27 апреля 2011

Что не так?

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

Используйте инструменты, такие как Firebug или инструменты разработчика Chrome, чтобы узнать, был ли ответ сжат.

На вкладке "Сеть" инструментов разработчика Chrome сжатый ответ будет выглядеть примерно так:

http://fhc.quickmediasolutions.com/image/-1775578843.png

1 голос
/ 21 февраля 2013

В качестве дополнительного совета: на мобильном телефоне я заметил, что gzip не работал с некоторыми активами, чтобы, наконец, обнаружить, что ресурсы находятся в кеше приложения, поэтому они вообще не извлекались с сервера. К сожалению, аудиты Chrome еще недостаточно умны, чтобы знать, что кэшированные ресурсы не нужно сжимать, и сообщают о них как о проблемах.

1 голос
/ 27 апреля 2011

при использовании apache mod_deflate намного эффективнее и удобнее… http://httpd.apache.org/docs/2.0/mod/mod_deflate.html

1 голос
/ 27 апреля 2011

При просмотре исходного кода в браузере вы всегда увидите распакованную версию.

0 голосов
/ 17 февраля 2012

Может быть, это может помочь.

<?php
function gzip_output() {
$HTTP_ACCEPT = $_SERVER['HTTP_ACCEPT_ENCODING'];

if (headers_sent()) {
    $encoding = false;
} elseif (strpos($HTTP_ACCEPT, 'x-gzip') !== false) {
    $encoding = 'x-gzip';
} elseif (strpos($HTTP_ACCEPT, 'gzip') !== false) {
    $encoding = 'gzip';
} else {
    $encoding = false;
}

if ($encoding) {
    $contents = ob_get_contents();
    ob_end_clean();
    header('Content-Encoding: ' . $encoding);
    print("\x1f\x8b\x08\x00\x00\x00\x00\x00");
    $size = strlen($contents);
    $contents = gzcompress($contents, 9);
    $contents = substr($contents, 0, $size);
    echo $contents;
    exit();
  } else {
     ob_end_flush();
     exit();
  }
}
  // At the beginning of each page call these two functions
  ob_start();
 ob_implicit_flush(0);

 // Then do everything you want to do on the page
 ?>
 <html>
 <body>
 <p>This should be a compressed page.</p>
  </html>
  <body>
  <?

// Call this function to output everything as gzipped content.
gzip_output();
?>
...