使用php判斷網(wǎng)頁是否gzip壓縮
更新時間:2013年06月25日 16:24:02 作者:
本篇文章是對使用php判斷網(wǎng)頁是否gzip壓縮進行了詳細的分析介紹,需要的朋友參考下
昨天晚上群里有朋友采集網(wǎng)頁時發(fā)現(xiàn)file_get_contents 獲得的網(wǎng)頁保存到本地為亂碼,響應的header 里 Content-Encoding:gzip
但在瀏覽器里看是正常的。
因為我有過相關經(jīng)驗馬上發(fā)現(xiàn)是網(wǎng)站開啟了gzip而file_get_contents 獲得的是壓縮過的頁面,而不是解壓過的頁面(不知道是不是要file_get_conttents 請求網(wǎng)頁時帶上相應的參數(shù),直接獲得沒有被gzip壓縮過的網(wǎng)頁?)
剛好我前不久剛看到可以用讀取文件的前2個字節(jié)判斷文件類型。群里面的朋友也說gzip壓縮過的網(wǎng)頁(gbk編碼)前2字節(jié)是 1F 8B 于是就可以判斷網(wǎng)頁是否gzip壓縮過。
代碼如下:
//米爾軍事網(wǎng)采用 gzip壓縮網(wǎng)頁
//file_get_contents 直接獲得的網(wǎng)頁是亂碼。
header('Content-Type:text/html;charset=utf-8' );
$url = 'http://www.miercn.com';
$file = fopen($url, "rb");
//只讀2字節(jié) 如果為(16進制)1f 8b (10進制)31 139則開啟了gzip ;
$bin = fread($file, 2);
fclose($file);
$strInfo = @unpack("C2chars", $bin);
$typeCode = intval($strInfo['chars1'].$strInfo['chars2']);
$isGzip = 0;
switch ($typeCode)
{
case 31139:
//網(wǎng)站開啟了gzip
$isGzip = 1;
break;
default:
$isGzip = 0;
}
$url = $isGzip ? "compress.zlib://".$url:$url; // 三元表達式
$mierHtml = file_get_contents($url); //獲得米爾軍事網(wǎng)數(shù)據(jù)
$mierHtml = iconv("gbk","utf-8",$mierHtml);
echo $mierHtml;
但在瀏覽器里看是正常的。
因為我有過相關經(jīng)驗馬上發(fā)現(xiàn)是網(wǎng)站開啟了gzip而file_get_contents 獲得的是壓縮過的頁面,而不是解壓過的頁面(不知道是不是要file_get_conttents 請求網(wǎng)頁時帶上相應的參數(shù),直接獲得沒有被gzip壓縮過的網(wǎng)頁?)
剛好我前不久剛看到可以用讀取文件的前2個字節(jié)判斷文件類型。群里面的朋友也說gzip壓縮過的網(wǎng)頁(gbk編碼)前2字節(jié)是 1F 8B 于是就可以判斷網(wǎng)頁是否gzip壓縮過。
代碼如下:
復制代碼 代碼如下:
//米爾軍事網(wǎng)采用 gzip壓縮網(wǎng)頁
//file_get_contents 直接獲得的網(wǎng)頁是亂碼。
header('Content-Type:text/html;charset=utf-8' );
$url = 'http://www.miercn.com';
$file = fopen($url, "rb");
//只讀2字節(jié) 如果為(16進制)1f 8b (10進制)31 139則開啟了gzip ;
$bin = fread($file, 2);
fclose($file);
$strInfo = @unpack("C2chars", $bin);
$typeCode = intval($strInfo['chars1'].$strInfo['chars2']);
$isGzip = 0;
switch ($typeCode)
{
case 31139:
//網(wǎng)站開啟了gzip
$isGzip = 1;
break;
default:
$isGzip = 0;
}
$url = $isGzip ? "compress.zlib://".$url:$url; // 三元表達式
$mierHtml = file_get_contents($url); //獲得米爾軍事網(wǎng)數(shù)據(jù)
$mierHtml = iconv("gbk","utf-8",$mierHtml);
echo $mierHtml;
您可能感興趣的文章:
- php使用ob_start()實現(xiàn)圖片存入變量的方法
- PHP使用ob_start生成html頁面的方法
- php緩沖 output_buffering和ob_start使用介紹
- 用php的ob_start來生成靜態(tài)頁面的方法分析
- 用PHP ob_start()控制瀏覽器cache、生成html實現(xiàn)代碼
- php讀取遠程gzip壓縮網(wǎng)頁的方法
- PHP壓縮html網(wǎng)頁代碼(清除空格,換行符,制表符,注釋標記)
- php中ob函數(shù)緩沖機制深入理解
- php中ob_get_length緩沖與獲取緩沖長度實例
- php ob_flush,flush在ie中緩沖無效的解決方法
- php中ob(Output Buffer 輸出緩沖)函數(shù)使用方法
- php基于ob_start(ob_gzhandler)實現(xiàn)網(wǎng)頁壓縮功能的方法
相關文章
sourcesafe管理phpproj文件的補充說明(downmoon)
在使用vs.php+ sourcesafe管理代碼時,發(fā)現(xiàn)有時候并不能從vs.net IDE中正確獲取phpproj文件下的所有文件。但從sourcesafe IDE下卻可以。2009-04-04PHP封裝的svn類使用內(nèi)置svn函數(shù)實現(xiàn)根據(jù)svn版本號導出相關文件示例
這篇文章主要介紹了PHP封裝的svn類使用內(nèi)置svn函數(shù)實現(xiàn)根據(jù)svn版本號導出相關文件,結(jié)合實例形式分析了php封裝的svn操作類與根據(jù)版本導出相關版本文件操作技巧,需要的朋友可以參考下2018-06-06php使用SAE原生Mail類實現(xiàn)各種類型郵件發(fā)送的方法
這篇文章主要介紹了php使用SAE原生Mail類實現(xiàn)各種類型郵件發(fā)送的方法,結(jié)合實例形式分析了SAE平臺解決郵件發(fā)送問題的相關操作技巧,需要的朋友可以參考下2016-10-10Zend Framework上傳文件重命名的實現(xiàn)方法
這篇文章主要介紹了Zend Framework上傳文件重命名的實現(xiàn)方法,結(jié)合實例形式分析了Zend Framework上傳文件重命名的具體操作步驟與配置、檢測、重命名操作的相關實現(xiàn)技巧,需要的朋友可以參考下2016-11-11PHP 執(zhí)行系統(tǒng)外部命令 system() exec() passthru()
PHP作為一種服務器端的腳本語言,象編寫簡單,或者是復雜的動態(tài)網(wǎng)頁這樣的任務,它完全能夠勝任。但事情不總是如此,有時為了實現(xiàn)某個功能,必須借助于操作系統(tǒng)的外部程序(或者稱之為命令),這樣可以做到事半功倍。2009-08-08一些需要禁用的PHP危險函數(shù)(disable_functions)
有時候為了安全我們需要禁掉一些PHP危險函數(shù),整理如下需要的朋友可以參考下2012-02-02PHP基于imagick擴展實現(xiàn)合成圖片的兩種方法【附imagick擴展下載】
這篇文章主要介紹了PHP基于imagick擴展實現(xiàn)合成圖片的兩種方法,結(jié)合實例形式分析了php使用imagick擴展進行圖片合并的具體操作方法與相關實現(xiàn)技巧,并附帶imagick擴展下載地址與配置方法,需要的朋友可以參考下2017-11-11