php 内容编码错误,PHP输出缓冲,ob_gzhandler引起的内容编码错误?
應用程序的輸出應該只包含一個輸出編碼.如果您有多個編碼方式不同的塊,那么瀏覽器將得到一個無法使用的結果.因此編碼錯誤.
Kohana本身已經使用了輸出緩沖區.如果你想將它與你的ob_gzhandler輸出緩沖區結合起來,你需要在kohana初始化它之前啟動你的緩沖區.那是因為輸出緩沖區是可堆疊的.當kohana完成輸出緩沖后,您的申請將適用:
ob_start('ob_gzhandler'); # your buffer:
ob_starts and ends by kohana
因此,每當kohana完成一些輸出時,這些塊將被傳遞到輸出回調(ob_gzhandler())并將進行gz編碼.
然后,瀏覽器應該只獲取gz編碼的數據,因為它是最頂層的輸出緩沖區.
使用ob_gzhandler并手動回顯緩沖區
如果你使用ob_start(‘ob_gzhandler’)讓PHP處理壓縮,然后你回顯ob_get_clean(),你將創建一個不可靠的輸出.這與壓縮與輸出緩沖的工作方式有關:
PHP將緩沖輸出塊.這意味著,PHP開始壓縮輸出但保留一些字節以繼續壓縮.所以ob_get_clean()返回緩沖區的遠程壓縮部分.通常這個結果并不完整.
要處理它,首先刷新緩沖區:
ob_start('ob_gzhandler') OR ob_start();
echo 'eh?';
ob_flush();
$gz = ob_get_clean();
echo $gz;
并確保在此之后您沒有任何更多輸出.
如果您將PHP到達腳本的末尾,它將會處理:刷新和輸出.
現在你需要手動調用ob_flush()來顯式地讓PHP通過回調推送緩沖區.
用Curl檢查HTTP壓縮問題
由于firefox將返回錯誤,因此需要另一個檢查導致編碼錯誤的工具.您可以使用curl跟蹤發生的情況:
curl --compress -i URL
在顯示所有響應標頭和未編碼的主體時,將請求啟用壓縮的URL.這是必要的,因為PHP透明地啟用/禁用基于請求標頭的ob_gzhandler回調壓縮.
響應還表明PHP也將設置所需的響應頭.因此無需手動指定它們.這甚至是危險的,因為只有通過調用ob_start(‘ob_gzhandler’),你才能說壓縮是否被啟用.
如果壓縮被破壞,curl將給出錯誤描述,但不會顯示正文.
以下是由錯誤的PHP腳本引發的不完全生成的輸出引起的卷曲錯誤消息:
HTTP/1.1 200 OK
X-Powered-By: PHP/5.3.6
Content-Encoding: gzip
...
curl: (23) Error while processing content unencoding: invalid code lengths set
通過添加–raw開關,您甚至可以進入原始響應體:
curl --compress --raw -i URL
這可以給人一種出錯的印象,比如體內未壓縮的部位.
總結
以上是生活随笔為你收集整理的php 内容编码错误,PHP输出缓冲,ob_gzhandler引起的内容编码错误?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab中的 variable,ma
- 下一篇: java同时关闭两个窗口_在一个窗口中同