使用php判斷網(wǎng)頁(yè)是否gzip壓縮
更新時(shí)間:2013年06月25日 16:24:02 作者:
本篇文章是對(duì)使用php判斷網(wǎng)頁(yè)是否gzip壓縮進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
昨天晚上群里有朋友采集網(wǎng)頁(yè)時(shí)發(fā)現(xiàn)file_get_contents 獲得的網(wǎng)頁(yè)保存到本地為亂碼,響應(yīng)的header 里 Content-Encoding:gzip
但在瀏覽器里看是正常的。
因?yàn)槲矣羞^相關(guān)經(jīng)驗(yàn)馬上發(fā)現(xiàn)是網(wǎng)站開啟了gzip而file_get_contents 獲得的是壓縮過的頁(yè)面,而不是解壓過的頁(yè)面(不知道是不是要file_get_conttents 請(qǐng)求網(wǎng)頁(yè)時(shí)帶上相應(yīng)的參數(shù),直接獲得沒有被gzip壓縮過的網(wǎng)頁(yè)?)
剛好我前不久剛看到可以用讀取文件的前2個(gè)字節(jié)判斷文件類型。群里面的朋友也說gzip壓縮過的網(wǎng)頁(yè)(gbk編碼)前2字節(jié)是 1F 8B 于是就可以判斷網(wǎng)頁(yè)是否gzip壓縮過。
代碼如下:
//米爾軍事網(wǎng)采用 gzip壓縮網(wǎng)頁(yè)
//file_get_contents 直接獲得的網(wǎng)頁(yè)是亂碼。
header('Content-Type:text/html;charset=utf-8' );
$url = 'http://www.miercn.com';
$file = fopen($url, "rb");
//只讀2字節(jié) 如果為(16進(jìn)制)1f 8b (10進(jìn)制)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; // 三元表達(dá)式
$mierHtml = file_get_contents($url); //獲得米爾軍事網(wǎng)數(shù)據(jù)
$mierHtml = iconv("gbk","utf-8",$mierHtml);
echo $mierHtml;
但在瀏覽器里看是正常的。
因?yàn)槲矣羞^相關(guān)經(jīng)驗(yàn)馬上發(fā)現(xiàn)是網(wǎng)站開啟了gzip而file_get_contents 獲得的是壓縮過的頁(yè)面,而不是解壓過的頁(yè)面(不知道是不是要file_get_conttents 請(qǐng)求網(wǎng)頁(yè)時(shí)帶上相應(yīng)的參數(shù),直接獲得沒有被gzip壓縮過的網(wǎng)頁(yè)?)
剛好我前不久剛看到可以用讀取文件的前2個(gè)字節(jié)判斷文件類型。群里面的朋友也說gzip壓縮過的網(wǎng)頁(yè)(gbk編碼)前2字節(jié)是 1F 8B 于是就可以判斷網(wǎng)頁(yè)是否gzip壓縮過。
代碼如下:
復(fù)制代碼 代碼如下:
//米爾軍事網(wǎng)采用 gzip壓縮網(wǎng)頁(yè)
//file_get_contents 直接獲得的網(wǎng)頁(yè)是亂碼。
header('Content-Type:text/html;charset=utf-8' );
$url = 'http://www.miercn.com';
$file = fopen($url, "rb");
//只讀2字節(jié) 如果為(16進(jìn)制)1f 8b (10進(jìn)制)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; // 三元表達(dá)式
$mierHtml = file_get_contents($url); //獲得米爾軍事網(wǎng)數(shù)據(jù)
$mierHtml = iconv("gbk","utf-8",$mierHtml);
echo $mierHtml;
您可能感興趣的文章:
- php使用ob_start()實(shí)現(xiàn)圖片存入變量的方法
- PHP使用ob_start生成html頁(yè)面的方法
- php緩沖 output_buffering和ob_start使用介紹
- 用php的ob_start來生成靜態(tài)頁(yè)面的方法分析
- 用PHP ob_start()控制瀏覽器cache、生成html實(shí)現(xiàn)代碼
- php讀取遠(yuǎn)程gzip壓縮網(wǎng)頁(yè)的方法
- PHP壓縮html網(wǎng)頁(yè)代碼(清除空格,換行符,制表符,注釋標(biāo)記)
- php中ob函數(shù)緩沖機(jī)制深入理解
- php中ob_get_length緩沖與獲取緩沖長(zhǎng)度實(shí)例
- php ob_flush,flush在ie中緩沖無效的解決方法
- php中ob(Output Buffer 輸出緩沖)函數(shù)使用方法
- php基于ob_start(ob_gzhandler)實(shí)現(xiàn)網(wǎng)頁(yè)壓縮功能的方法
相關(guān)文章
php編寫的抽獎(jiǎng)程序中獎(jiǎng)概率算法
本文給大家分享的是php中獎(jiǎng)概率算法,可用于刮刮卡,大轉(zhuǎn)盤等抽獎(jiǎng)算法。用法很簡(jiǎn)單,代碼里有詳細(xì)注釋說明,一看就懂,有需要的小伙伴參考下吧。2015-05-05
php bootstrap實(shí)現(xiàn)簡(jiǎn)單登錄
這篇文章主要為大家詳細(xì)介紹了php bootstrap實(shí)現(xiàn)簡(jiǎn)單登錄的具體方法,感興趣的小伙伴們可以參考一下2016-03-03
編譯php 5.2.14+fpm+memcached(具體操作詳解)
本篇文章是對(duì)編譯php5.2.14+fpm+memcached的具體操作進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
php通過array_merge()函數(shù)合并關(guān)聯(lián)和非關(guān)聯(lián)數(shù)組的方法
這篇文章主要介紹了php通過array_merge()函數(shù)合并關(guān)聯(lián)和非關(guān)聯(lián)數(shù)組的方法,涉及php中array_merge()函數(shù)操作數(shù)組合并的技巧,需要的朋友可以參考下2015-03-03

