今天打幫客戶整理一個(gè)網(wǎng)站時(shí)發(fā)現(xiàn)在firefox提示:內(nèi)容編碼錯(cuò)誤 無(wú)法顯示您嘗試查看的頁(yè)面,因?yàn)樗褂昧藷o(wú)效或者不支持的壓縮格式了,我一看客戶是php站,導(dǎo)致原因可能是ob_gzhandler原因。
firefox錯(cuò)誤碼:內(nèi)容編碼錯(cuò)誤,無(wú)法顯示您嘗試查看的頁(yè)面,因?yàn)樗褂昧藷o(wú)效或者不支持的壓縮格式,請(qǐng)聯(lián)系網(wǎng)站的所有者以告知此問(wèn)題
錯(cuò)誤原因和解決辦法:
1、保證php程序沒(méi)有任何警告或出錯(cuò)的提示
2、PHP代碼ob_start('ob_gzhandler')導(dǎo)致的,導(dǎo)致的原因有兩種:
a、服務(wù)器不支持這種壓縮格式,可使用function_exists('ob_gzhandler')判斷,解決方法 ob_start('ob_gzhandler')改為ob_start();
b、使用ob_start('ob_gzhandler')時(shí)候前面已經(jīng)有內(nèi)容輸出,檢查前面內(nèi)容以及require include調(diào)用文件的內(nèi)容。若無(wú)法找到可以在調(diào)用其它文件前使用ob_start(),調(diào)用之后使用 ob_end_clean () 來(lái)清除輸出的內(nèi)容;
3、set_magic_quotes_runtime()函數(shù):
提示:Function set_magic_quotes_runtime() is deprecated,導(dǎo)致這個(gè)提示的原因是在PHP5.3后此特性已經(jīng)關(guān)閉,在PHP6中已經(jīng)完全移除此特性,也就是這個(gè)函數(shù)已經(jīng)不存在了。你可以注釋 或者刪除掉出錯(cuò)的行,或者是在set_magic_quotes_runtime()前面加@符號(hào)。
4、PHP5.30版本,默認(rèn)不再支 持這樣的語(yǔ)法,輸出變量需使用php echo $username;?>語(yǔ)法才可以。你可以通過(guò)將 php.ini 中的 short_open_tag 設(shè)置為 On,以兼容原來(lái)的語(yǔ)法。
php關(guān)于ob_start('ob_gzhandler')啟用GZIP壓縮的bug,如果使用ob_start("ob_gzhandler"); 則ob_clean()后面的輸出將不顯示,這是個(gè)bug,可以用ob_end_clean();ob_start("ob_gzhandler"); 代替ob_clean();否則后面輸出內(nèi)容將是空。
上面的代碼期望輸出more content實(shí)際上什么內(nèi)容也不會(huì)輸出,下面就正常了:
下面自定義一個(gè)回調(diào)函數(shù)再測(cè)試:
上面是正常的,但使用ob_end_clean代替ob_clean后又會(huì)導(dǎo)致后面的輸出不會(huì)顯示,因此即使是下面的代碼依然會(huì)在使用ob_clean或者ob_end_clean后會(huì)導(dǎo)致輸出為空。
最穩(wěn)定的啟用頁(yè)面壓縮的方法應(yīng)該類(lèi)似下面
但如果一定要使用ob_gzhandler來(lái)啟用頁(yè)面壓縮就要注意本文的第一句話了,事實(shí)上,下面的代碼只是瀏覽器不顯示:
但如果測(cè)試一下
將會(huì)返回如下信息
失去了跟主機(jī)的連接,可以看出more content已經(jīng)輸出.