gzip тупо скопирован у котерова. на одном из компов (разработчика) по непонятным критериям стало перекидывать с нормального вызова скрипта на c:\windows\... \ dnserror... \ путь к скрипту. отключение ob_start("ob_gzhandler", 9); это устранило. шозанах?
Хз по поводу проблемы, но уровень сжатия выше 3 не ставь. Полезного мало, а сервер лишний раз силится.
а у меня вот такие 2 функции для гзип, тоже содрал где-то PHP: <? function checkgzip(){ 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 gzip($level=3,$noprin=0){ header ("Last-Modified: " . date('r', time()-60*60*10) ." GMT"); $ENCODING = checkgzip(); if ($ENCODING){ $info = "\n<!-- Сжатие: $ENCODING -->\n"; $Contents = ob_get_contents(); ob_end_clean(); $info.= "<!-- Размер файла до сжатия: ".strlen($Contents)." байт "; $info.= "После сжатия: ". strlen(gzcompress($Contents, $level)). " байт -->"; if (!$noprin) $Contents .= $info; 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); header("Content-length: ".strlen($print)); print $print; exit; }else{ ob_end_flush(); exit; } } ?> gzip вызывется в конце скрипта, в начале прописывается ob_start(); ob_implicit_flush(0);
Mr.M.I.T. Фигня какая-то. Зачем делается два раза упаковка? Я понимаю, что первый раз для того, чтобы узнать её размер, но так не делается. Еще не понятно, почему после сжатия размер выясняется через strlen.
Sergey89 Gzip сжимает строку в шестнадцатиричный код, а его разве можно измерить обычной символомеркой? Или я не прав?