что такое, подключаю gzip сжатие и опера 9.51 загружает страницу но загрузку не останавливает, как будто конца файла не видит, в результате в опере срабатывает time out и страница перезагружается тип сжатия как в $_SERVER['HTTP_ACCEPT_ENCODING'] - x-gzip
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=2,$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"); header("Content-length: ".strlen($Contents)); 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); exit; }else{ ob_end_flush(); exit; } } ?> Соответственно index.php PHP: <? @ob_start(); @ob_implicit_flush(0); @session_start(); include "sis/inc/gzip_inc.php"; // Чего-то там... gzip(); ?>
Mr.M.I.T. Content-Length посылаешь кривой. Должно быть ровно столько, сколько отправляешь данных (т.е. объем после сжатия, а не до). Опера виновата, ага...