使用php判斷網(wǎng)頁是否gzip壓縮
更新時間:2013年06月25日 16:24:02 作者:
本篇文章是對使用php判斷網(wǎng)頁是否gzip壓縮進行了詳細的分析介紹,需要的朋友參考下
昨天晚上群里有朋友采集網(wǎng)頁時發(fā)現(xiàn)file_get_contents 獲得的網(wǎng)頁保存到本地為亂碼,響應(yīng)的header 里 Content-Encoding:gzip
但在瀏覽器里看是正常的。
因為我有過相關(guān)經(jīng)驗馬上發(fā)現(xiàn)是網(wǎng)站開啟了gzip而file_get_contents 獲得的是壓縮過的頁面,而不是解壓過的頁面(不知道是不是要file_get_conttents 請求網(wǎng)頁時帶上相應(yī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;
但在瀏覽器里看是正常的。
因為我有過相關(guān)經(jīng)驗馬上發(fā)現(xiàn)是網(wǎng)站開啟了gzip而file_get_contents 獲得的是壓縮過的頁面,而不是解壓過的頁面(不知道是不是要file_get_conttents 請求網(wǎng)頁時帶上相應(yīng)的參數(shù),直接獲得沒有被gzip壓縮過的網(wǎng)頁?)
剛好我前不久剛看到可以用讀取文件的前2個字節(jié)判斷文件類型。群里面的朋友也說gzip壓縮過的網(wǎng)頁(gbk編碼)前2字節(jié)是 1F 8B 于是就可以判斷網(wǎng)頁是否gzip壓縮過。
代碼如下:
復(fù)制代碼 代碼如下:
//米爾軍事網(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)頁代碼(清除空格,換行符,制表符,注釋標(biāo)記)
- 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)頁壓縮功能的方法
相關(guān)文章
編譯php 5.2.14+fpm+memcached(具體操作詳解)
本篇文章是對編譯php5.2.14+fpm+memcached的具體操作進行了詳細的分析介紹,需要的朋友參考下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

