2012-09-17 62 views
3

我正在寫在PHP server sent event流,我收到錯誤消息:PHP gzip和服務器發送的事件流

"failed to flush buffer zlib output compression"

我相信這是在試圖刷新gzip壓縮的輸出。

這裏是我的PHP代碼:

header ("Content-Type: text/event-stream\n\n"); 
header ("Cache-Control: no-cache"); 

echo "data: {$json}"; 
echo "\n\n"; 

ob_flush(); // ERROR HERE 
flush(); 

我的問題是什麼是得到這個工作的最佳方式 - 不理想在Apache中禁用gzip的 - 可以在PHP中被關閉?

我試過,但沒有奏效:

if(ini_get('zlib.output_compression')){ 
    ini_set('zlib.output_compression', 'Off'); 
} 

回答

2

不能沿着ob_輸出處理程序使用zlib壓縮輸出。請參閱zlib.output_compression上的php文檔,它多次聲明它。

如果發現了,爲了能夠在PHP輸出壓縮的最簡單的方法是隻做到這一點:

ini_set("zlib.output_compression", 1); 
ini_set("zlib.output_compression_level", 9); 

和寬鬆的所有ob_ *的東西。現在,當客戶端請求一個網頁,例如標題:

Accept-Encoding: gzip, deflate 

zlib的將gzip壓縮的響應主體爲你,它會在響應中設置此爲您提供:

Content-Encoding: gzip 

我花了幾個小時我的在這之前就意識到這兩條線的簡單性。並且根本不使用任何沖洗