Почему ob_start ('ob_gzhandler') нарушает этот сайт?

У меня есть сайт, который генерирует ошибку кодирования содержимого в браузере, если присутствует ob_start ('ob_gzhandler'). Если я удалю оператор, он будет работать нормально.

  • Сайт запускает те же рамки, сервер и хостинг-пакет, что и ряд других сайтов. Все они работают независимо от того, находится ли там выражение.
  • Оператор находится в структуре, а не в коде приложения, поэтому он разделяется всеми сайтами.
  • Там нет различий в конфигурации между рабочими сайтами и нерабочим сайтом.
  • Сайт работает нормально локально, используя тот же самый код и данные.
  • Вы можете получить сайт с curl/wget, а HTML-код возвращается в браузере.
  • Заголовки ответов точно такие же, без инструкции.

Теперь я удалил весь код на удаленном сервере и повторно загрузил все. Все равно никаких изменений. Следующим шагом будет переустановка сайта и запуск с нуля, но я не хочу потерять все данные.

Любые указатели, предложения или решения?

Ответ 1

обычно я делаю ниже, и он работает для меня, дайте ему попробовать

Напишите ob_end_clean(); или ob_flush(); в нижней части страницы, на которой вы начинаете ob_start();

Литература:

ob_end_clean();

ob_flush();

Ответ 2

Если вы уже используете сжатие gzip Apache (что по внешнему виду вы делаете, поскольку CSS/JS сжаты, насколько я могу видеть), то использование ob_start ('ob_gzhandler') сжимает это сжатие. и браузер не сможет справиться с этим.

Я, конечно, говорю по исправлению, поскольку я всегда использовал Apache для этого, но похоже, что вы двойные gzipping-вещи, поэтому он работает без инструкции ob_gzhandler.

Проверьте файлы .htaccess на других сайтах и ​​сравните их с сайтом, на котором вы работаете, с той же проблемой, что и я не вижу, что вы используете Drupal на zacoders.net и jadeit.co.za, только на jadeit.co.za, который заставляет меня думать, что они не те же рамки, что и вы сказали? развести руками

Ответ 3

Просто поместите эту строку кода в начало, и все будет хорошо.

while (ob_get_level() > 0) { ob_end_clean() ; }