日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php关于ob_start('ob_gzhandler')启用GZIP压缩的bug

發布時間:2023/12/2 php 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php关于ob_start('ob_gzhandler')启用GZIP压缩的bug 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
如果使用ob_start("ob_gzhandler");?
則ob_clean()后面的輸出將不顯示,這是個bug,
可以用ob_end_clean();ob_start("ob_gzhandler"); 代替ob_clean();
否則后面輸出內容將是空。

<?php
error_reporting(E_ALL);
ob_start("ob_gzhandler");
echo "content";
ob_clean();
echo "more content";
?>
上面的代碼期望輸出more content實際上什么內容也不會輸出。

下面就正常了
<?php
error_reporting(E_ALL);
ob_start("ob_gzhandler");
echo "content";
ob_end_clean();
ob_start("ob_gzhandler");
echo "more content";
?>

下面自定義一個回調函數再測試
<?php
function my_ob_gzhandler($buffer,$mod){
?? header("Content-Encoding: gzip");
?? return gzencode($buffer, 9, FORCE_GZIP);?
}

error_reporting(E_ALL);
ob_start("my_ob_gzhandler");
echo "content";
ob_clean();
echo "more content";
?>
上面是正常的,但使用ob_end_clean代替ob_clean后又會導致后面的輸出不會顯示。

因此即使是下面的代碼依然會在使用ob_clean或者ob_end_clean后會導致輸出為空。
<?php
if (ini_get('zlib.output_compression')) {
?? if (ini_get('zlib.output_compression_level') != 9) {
????? ini_set('zlib.output_compression_level', '9');
?? }?
?? ob_start();
} else {
?? if (strstr($_SERVER['HTTP_ACCEPT_ENCODING'], "gzip")) {
????? ob_start("ob_gzhandler");
?? } else {
????? ob_start();
?? }?
}?
?>

最穩定的啟用頁面壓縮的方法應該類似下面
<?php
if(extension_loaded('zlib')) {
ini_set('zlib.output_compression', 'On');
ini_set('zlib.output_compression_level', '3');
}
?>

但如果一定要使用ob_gzhandler來啟用頁面壓縮就要注意本文的第一句話了。

事實上,下面的代碼只是瀏覽器不顯示
error_reporting(E_ALL);
ob_start("ob_gzhandler");
echo "content";
ob_clean();
echo "more content";

但如果測試一下

telnet localhost 80
GET /test.php HTTP/1.0
<Enter>
<Enter>

將會返回如下信息

HTTP/1.1 200 OK
Date: Fri, 20 Feb 2009 15:40:17 GMT
Server: Apache/2.2.6 (Win32) PHP/5.2.5
X-Powered-By: PHP/5.2.5
Vary: Accept-Encoding
Content-Length: 12
Connection: close
Content-Type: text/html

more content

失去了跟主機的連接。

可以看出more content已經輸出

但為何瀏覽器不顯示呢?

轉載于:https://www.cnblogs.com/914556495wxkj/p/6206226.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的php关于ob_start('ob_gzhandler')启用GZIP压缩的bug的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。