У меня есть смешанный веб-сайт, где у нас есть ExpressionEngine CMS с магазином Magento.
На нашем сайте EE у меня есть шаблон, где я вызываю плагин для получения информации о корзине магазина.
Мы используем аутентификацию Magento, поэтому зарегистрированный пользователь является пользователем Magento.
Мы хотим показать что-то вроде этого:
Код в плагине подключается к Magento, получает зарегистрированного пользователя, если он вошел в систему, и устанавливает количество товаров в корзине.
Это HTML-код, который плагин должен вернуть в шаблон:
<span class="carticon">(0)</span><a href="http://www.example.com/store/checkout/cart/">My Cart</a><span>Welcome, MB34!</span><a href="http://www.example.com/store/customer/account/logout/">Logout</a>
Но если я включу gZip на ExpressionEngine, я получу ERR_CONTENT_DECODING_FAILED исключение, потому что Magento не имеет встроенного gZip. В настоящее время у нас не включен mod_deflate, так как же EE сможет gZip? Это должно быть через ob_gzhandler.
Теперь, если я изменю свой плагин, чтобы использовать ob_gzhandler следующим образом:
ob_start("ob_gzhandler");
echo trim($result);
ob_end_flush();
Я получаю дополнительные символы в конце вывода:
Есть идеи, что вызывает это и как это исправить?
Мы скоро включим mod_deflate; это исправит? Я имею в виду, что тогда мне не придется использовать ob_gzhandler, верно?
Когда используешь ob_gzhandler
важно, чтобы вы не смешивали контент с другими кодировками. Заставляя ob_end_flush()
возможно, вы вызываете прекращение работы этого буфера до того, как закончите отправку контента. Это может быть вызвано простой пустой строкой в конце файла. Я предлагаю вам пропустить ob_end_flush()
и пусть буфер завершится естественным образом, когда ваш PHP-скрипт завершится.
Этот код работает для меня при использовании ob_get_contents
ob_start("ob_gzhandler");
echo trim($result);
$gzcontent = ob_get_contents();
ob_end_clean();