2010-02-24 3 views
0

Это странный вариант. Я медленно перестраиваю веб-сайт на реальном сервере. Некоторые разделы сайта были перестроены, поэтому код помещается в подкаталог домашнего каталога (например:/mysite/newcode).Почему сжатие gzip не работает?

Я успешно скрепил старый сайт с помощью ob_start ("ob_gzhandler"); Итак, я применил тот же код для нового кода. Однако, по какой-то нечетной причине, его возвращение не было gzipped. Я проверил на http://www.whatsmyip.org/http_compression/ и http://www.gidnetwork.com/tools/gzip-test.php. Я не могу понять, почему это не будет gzipping нового кода, если gzip-обработчик включен как одна из первых строк (перед любым выходом) как для старого, так и для нового кода.

PHP 5.1.6 Apache 2.0 Centos 5

+1

Где вы называете 'ob_start'? – Gumbo

ответ

0

Обнаруженные проблема, не уверен, что если документально нигде ...

Если вы используете ob_start ("ob_gzhandler"); и вы, чтобы очистить свой контент, вы должны использовать ob_flush(), а не flush(). Использование флеша выкинет сжатие.

+0

вы должны использовать ob_end_flush() или ob_end_clean(), как только вы закончите с выходом – stillstanding

+0

Помните, почему я спрашиваю? – David

+0

Я думаю, что комментарии к документам PHP хорошо объясняют это. http://php.net/manual/en/function.ob-end-flush.php Вы можете оставить это в простом сценарии запроса веб-страницы, и он будет вызван автоматически. Но PHP и эти функции могут использоваться в других сценариях. Кроме того, если вы решите повторно использовать свой код в будущем, у вас больше шансов столкнуться с проблемами, если вы не вручную очистили. – Liam

1

http://docs.php.net/ob_gzhandler говорит:

Перед ob_gzhandler() фактически посылает сжатые данные, он определяет, какой тип контента, кодирующего браузер будет принимать ("GZIP", "спустить" или вообще нет) и соответственно вернет свой результат.
Может ли это быть причиной вашей проблемы?

редактировать: Вы можете проверить это с чем-то вроде

function dbg_ob_gzhandler($buffer, $mode) { 
    error_log('dbg_ob_gzhandler invoked'); 
    $rv = ob_gzhandler($buffer, $mode); 
    if (false===$rv) { 
    error_log('client does not support compressed content'); 
    } 
    return $rv; 
} 
ob_start('dbg_ob_gzhandler'); 
+0

Я проверил с помощью Live HTTP Headers (в firefox 3.6) и im передал «Accept-Encoding: gzip, deflate» на сервер. Поэтому он должен возвращать сжатую информацию. Однако, похоже, единственное, что сжимается, это случайный файл css. – David

+0

Я бы предпочел проверить это, а также что ob_gzhandler() вызывается вообще на стороне сервера (хотя бы потому, что это такой простой тест). – VolkerK

Смежные вопросы