За последние 24 часа нас посетили 55495 программистов и 1710 роботов. Сейчас ищут 953 программиста ...

Что у оперы с gzip?

Тема в разделе "Прочие вопросы по PHP", создана пользователем Mr.M.I.T., 11 авг 2008.

  1. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    что такое, подключаю gzip сжатие и опера 9.51 загружает страницу но загрузку не останавливает, как будто конца файла не видит, в результате в опере срабатывает time out и страница перезагружается
    тип сжатия как в $_SERVER['HTTP_ACCEPT_ENCODING'] - x-gzip
     
  2. sword dancer

    sword dancer Активный пользователь

    С нами с:
    17 фев 2008
    Сообщения:
    295
    Симпатии:
    0
    код покажи
     
  3. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    PHP:
    1. <?
    2. function checkgzip(){
    3.  
    4. return 0;
    5. }
    6. if (strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'x-gzip') !== false) return "x-gzip";
    7. if (strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false) return "gzip";
    8. return 0;
    9. }
    10.  
    11. function gzip($level=2,$noprin=0){
    12. @header ("Last-Modified: " . date('r', time()-60*60*10) ." GMT");
    13. $ENCODING = checkgzip();
    14.    if ($ENCODING){
    15.         $info = "\n<!-- Сжатие: $ENCODING -->\n";
    16.         $Contents = ob_get_contents();
    17.         ob_end_clean();
    18.             $info.= "<!-- Размер файла до сжатия: ".strlen($Contents)." байт ";
    19.             $info.= "После сжатия: ".
    20.                    strlen(gzcompress($Contents, $level)).
    21.                    " байт -->";
    22.             if (!$noprin) $Contents .= $info;
    23.         header("Content-Encoding: $ENCODING");
    24.         header("Content-length: ".strlen($Contents));
    25.         print "\x1f\x8b\x08\x00\x00\x00\x00\x00";
    26.         $Size = strlen($Contents);
    27.         $Crc = crc32($Contents);
    28.         $Contents = gzcompress($Contents, $level);
    29.         $Contents = substr($Contents,  0,  strlen($Contents) - 4);
    30.         print $Contents;
    31.         print pack('V', $Crc);
    32.         print pack('V', $Size);
    33.         exit;
    34.     }else{
    35.         ob_end_flush();
    36.         exit;
    37.     }
    38. }
    39.  
    40. ?>
    Соответственно index.php
    PHP:
    1. <?
    2. include "sis/inc/gzip_inc.php";
    3. // Чего-то там...
    4.  
    5.  
    6. gzip();
    7. ?>
     
  4. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    Mr.M.I.T.
    Content-Length посылаешь кривой.
    Должно быть ровно столько, сколько отправляешь данных (т.е. объем после сжатия, а не до).
    Опера виновата, ага...
     
  5. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    как я мог так жестоко ошибаться =)
    там вообще не надо никакого Content-length