За последние 24 часа нас посетили 236611 программистов и 1808 роботов. Сейчас ищут 2190 программистов ...

ошибка с gzip

Тема в разделе "PHP для новичков", создана пользователем armadillo, 15 янв 2009.

  1. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    gzip тупо скопирован у котерова.
    на одном из компов (разработчика) по непонятным критериям стало перекидывать с нормального вызова скрипта на
    c:\windows\... \ dnserror... \ путь к скрипту.

    отключение ob_start("ob_gzhandler", 9); это устранило. шозанах?
     
  2. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    причем глючит оно при вызове из фрейма, напрямую все ок.
    ИЕ6. один из ИЕ6.
     
  3. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Хз по поводу проблемы, но уровень сжатия выше 3 не ставь. Полезного мало, а сервер лишний раз силится.
     
  4. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    Ты замерял разницу? )))
    не говоря о том, что она не всегда вообще есть.
     
  5. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    В интернетах пишут. :)
     
  6. Mr.M.I.T.

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

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    а у меня вот такие 2 функции для гзип, тоже содрал где-то
    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=3,$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.         $print="\x1f\x8b\x08\x00\x00\x00\x00\x00";
    25.         $Size = strlen($Contents);
    26.         $Crc = crc32($Contents);
    27.         $Contents = gzcompress($Contents, $level);
    28.         $Contents = substr($Contents,  0,  strlen($Contents) - 4);
    29.         $print.= $Contents;
    30.         $print.= pack('V', $Crc);
    31.         $print.= pack('V', $Size);
    32.         header("Content-length: ".strlen($print));
    33.         print $print;
    34.         exit;
    35.     }else{
    36.         ob_end_flush();
    37.         exit;
    38.     }
    39. }
    40.  
    41.  
    42. ?>
    43.  
    gzip вызывется в конце скрипта, в начале прописывается

    ob_start();
    ob_implicit_flush(0);
     
  7. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Mr.M.I.T.
    Фигня какая-то. Зачем делается два раза упаковка? Я понимаю, что первый раз для того, чтобы узнать её размер, но так не делается.
    Еще не понятно, почему после сжатия размер выясняется через strlen.
     
  8. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    наверное потому, что strlen binary safe функция?
     
  9. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Sergey89
    Gzip сжимает строку в шестнадцатиричный код, а его разве можно измерить обычной символомеркой? Или я не прав?
     
  10. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    это представление байта. strlen измеряет количество байт.
     
  11. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Sergey89
    Спасибо.