phpを使用して、Webページがgzip圧縮されているかどうかを判断します.

1411 ワード

昨日の夜、友達がホームページを採集したときにfileを見つけました.get_contentsが取得したページはローカルに乱符号化され、応答するヘッダーにContent-Encoding:gzipに保存されます.
しかし、ブラウザで見ると正常です.私は経験があるので、すぐにウェブサイトがgzipを開いてfileを開いたことに気づきました.get_contentsは圧縮されたページを取得し、解凍されたページではありません.
(file_get_conttentsがWebページを要求するときに対応するパラメータを持ってgzipに圧縮されていないWebページを直接取得するかどうか分かりません.)ちょうど、ファイルのタイプを読み取る最初の2バイトで判断できるのを見たばかりです.グループの友达もgzipが圧縮したページ(gbkコード)の前の2バイトは1 F 8 Bだと言って、ページがgzipが圧縮したかどうかを判断することができます.
コードは次のとおりです.
 
  
// gzip
//file_get_contents 。
header('Content-Type:text/html;charset=utf-8' );
$url = 'http://www.miercn.com';
$file = fopen($url, "rb");  
// 2   (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:      
      // gzip
        $isGzip = 1;
        break;
    default:  
        $isGzip = 0;
}  
$url = $isGzip ? "compress.zlib://".$url:$url; //
$mierHtml = file_get_contents($url); //
$mierHtml = iconv("gbk","utf-8",$mierHtml);
echo $mierHtml;