Ручное кодирование GZip на PHP

Я тестировал свой веб-сайт с помощью Page Speed, и результат был около 70/100. Включение сжатия было первым и наиболее важным фактором в его замедлении.

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

Проблема в том, что либо все браузеры не открывают веб-сайт (Firefox: «Страница, которую вы пытаетесь просмотреть, не может быть отображена, потому что она использует недопустимую или неподдерживаемую форму сжатия». Chrome: «303, ERR Content Encoding») и т. д.) или они отображают закодированную строку.

Live Headers показывает, что браузер принимает кодировку, а в ответе задан тип содержимого, но он все равно не работает.

GET / HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate

HTTP/1.1 200 OK
Content-Encoding: gzip
Content-Length: 5827
Vary: Accept-Encoding

private function _compress($data) {
    //return trim(preg_replace(array('/\>[^\S ]+/s','/[^\S ]+\</s','/(\s)+/s'), array('>','<','\\1'), $data));
    $supportsGzip = strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false;

    ob_start();
    if ($supportsGzip) {
        echo gzencode(trim(preg_replace('/\s+/', ' ', $data)), 9);
    } else {
        echo $data;
    }

    $content = ob_get_contents();
    header("content-type: text/html; charset: UTF-8");
    header("cache-control: must-revalidate");
    $offset = 60 * 60;
    $expire = "expires: " . gmdate("D, d M Y H:i:s", time() + $offset) . " GMT";
    header($expire);
    header('Content-Length: ' . strlen($content));
    header('Vary: Accept-Encoding');
    ob_end_clean();
    echo $content;
}

Если я изменю Content-Encoding на zlib , Я получаю закодированную строку:

‹������ÕZÿsÛ¶ÿW^‘¥²o‘¨/–-Ë–Ú؉_Ôµ•õÚ_v I°I‚!A©j–Öºnçÿb·»%ÍÚë²nëå?‘þ›=€¤L)’,ÛIw>ŸEâxïáƒ÷°ùÞ½O¶Ÿï߇Žtlؼµ·» $kŸ•¶ ã^ã<܃•\¾� Ÿº—\¸Ô6ŒûŽ”^Õ0z½^®WÊ ¿m4ÅjÅ°…XÎ’©Ã¦ænS·]#ÌÕF-|8LRPL²ìIÈ»5²-\É\™mô=FÀŒJ5"Ù—RóÝ�³Cý€ÉZ([ÙŠb%¹´YýÑãáîcx}±iD´˜¿KV#4”á§x>¬°à®íÒ ãpÅËæî1øÌ®‘@öm

Меня больше не волнует сжатие, как я хочу знать, почему оно не работает.

Ура,

13
задан M.Alnashmi 19 April 2011 в 05:23
поделиться