2011-06-01 131 views
2

我正在尋找一種方法來gzip我的XML響應,只有他們。我在Zend Framework中沒有找到任何材料如何做到這一點。我在我的抽象控制器中有一個響應方法,如下所示:Zend Framework和響應gzip壓縮

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 

我希望這有助於

親切的問候,

加里

+0

不是。我想做這樣的事情:$ this - > _ response-> setHeader('Content-Encoding','gzip,deflate'); ,但我收到XML解析錯誤。 – 2011-06-01 10:34:18

+0

看看我上面添加的代碼 – Garry 2011-06-01 11:13:45

+0

關閉,但是因此我得到錯誤「內容編碼錯誤」。使用gzencode而不是compress可以正常工作,但響應的大小與沒有gzip的大小相同。 – 2011-06-01 11:31:45

0

如果使用nginx的服務器,只是取消註釋您/etc/nginx/nginx.conf以下。加入text/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重新啓動它。