#zend-framework #gzip
#zend-framework #gzip
Вопрос:
Я ищу способ архивировать мои XML-ответы и только их. Я не нашел никаких материалов, как это сделать в Zend Framework. У меня есть метод ответа в моем абстрактном контроллере, вот так:
public function xmlResponse(SimpleXMLElement $xml, $contentType = null){
$this->_helper->layout->disableLayout();
Zend_Controller_Front::getInstance()->setParam('noViewRenderer', true);
$this->_response->setHeader('Content-Type', ($contentType) ? $contentType : 'text/xml');
$this->_response->setBody($xml->asXML());
} // xmlResponse
и я хочу добавить сюда сжатие в формате gzip.
Спасибо за помощь!
Ответ №1:
Это то, что вы ищете?:
$this->_response->setHeader('Content-Type', 'application/x-gzip');
$filter = new Zend_Filter_Compress('Gz');
$compressed = $filter->filter($xml->asXML());
$this->_response->setBody($compressed);
РЕДАКТИРОВАТЬ: Вы могли бы попробовать это, я не тестировал это, хотя:
$this->_response->setHeader("Accept-Encoding", "gzip, deflate");
$this->_response->setHeader("X-Compression", "gzip");
$this->_response->setHeader("Content-Encoding", "gzip");
$this->_response->setHeader("Content-type", "text/xml");
$this->_response->setHeader("Cache-Control", "must-revalidate");
$filter = new Zend_Filter_Compress('Gz');
$compressed = $filter->filter($xml->asXML());
$this->_response->setBody($compressed);
$this->_response->sendResponse();
РЕДАКТИРОВАТЬ: Или вы могли бы просто добавить эту строку в свой файл .htaccess
AddOutputFilterByType DEFLATE text/xml
Я надеюсь, что это поможет
С уважением,
Гарри
Комментарии:
1. Не совсем. Я хочу сделать что-то вроде этого: $this->_response-> setHeader(‘Content-Encoding’, ‘gzip, deflate’); , но я получаю ошибку синтаксического анализа xml.
2. Закрываю, но в результате получаю ошибку «Ошибка кодирования содержимого». Использование gzencode вместо compress работает нормально, но размер ответа такой же, как и без gzip.
3. Вы могли бы забыть о кодировании в ZF и просто добавить AddOutputFilterByType DEFLATE text / xml в свой файл .htaccess.
Ответ №2:
Если вы используете сервер nginx, просто раскомментируйте следующее на своем /etc/nginx/nginx.conf
. Добавление текста / xml в нем есть! Это моя конфигурация.
gzip on;
gzip_disable "msie6";
# gzip_vary on;
gzip_proxied any;
gzip_comp_level 9;
gzip_buffers 16 8k;
gzip_http_version 1.0;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml rss text/javascript application/javascript;
Затем перезапустите его через sudo /etc/init.d/nginx restart
.