php检测url页面是否使用gzip压缩小结

今日上午群里有对象收集网页时意识file_get_contents
获得的网页保存到本地为乱码,响应的header 里 Content-Encoding:gzip
但在浏览器里看是例行的。 因为本身有过相关资历马上意识是网址开启了gzip而file_get_contents
获得的是减少过的页面,实际不是解压过的页面(不精晓是还是不是要file_get_conttents
乞请网页时带上相应的参数,直接获得没有被gzip压缩过的网页?)
无独有偶笔者近来刚见到能够用读取文件的前2个字节推断文件类型。群里面包车型大巴相爱的人也说gzip压缩过的网页(gbk编码State of Qatar前2字节是
1F 8B 于是就能够判别网页是或不是gzip压缩过。
代码如下:
复制代码 代码如下:
//Mill军事网采取 gzip压缩网页
//file_get_contents 直接获取的网页是乱码。
header(‘Content-Type:text/html;charset=utf-8’ );
$url = ”;
$file = fopen($url, “rb”);  
//只读2字节  假使为(16进制卡塔尔国1f 8b (10进制State of Qatar31 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卡塔尔; //得到Mill军事网数据
$mierHtml = iconv(“gbk”,”utf-8″,$mierHtml);
echo $mierHtml;

若果张开gzip压缩传输呢

apache

第1步

 代码如下

LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so

然后在http.conf加如下例代码

 代码如下

# BEGIN GZIP
#apache开启gzip压缩,前提要装gzip模块哦
<ifmodule mod_deflate.c>
AddOutputFilterByType DEFLATE text/text text/html
text/plain text/xml text/css
application/x-javascript
application/javascript
</ifmodule>
# END GZIP

假设您是nginx服务器也可参照下边代码

 代码如下

#nginx开启gzip压缩,放在location内
gzip on;
gzip_min_length 1000;
gzip_buffers 4 8k;
gzip_http_version 1.1;
gzip_types text/text text/html text/plain text/xml
 text/css application/x-javascript application/javascript;

现今重启一下apache或nginx
就可以,那么要怎么着检查是或不是科学开启gzip呢,大家可采纳上边php代码

 

 代码如下

//Mill军事网采纳 gzip压缩网页
//file_get_contents 直接拿走的网页是乱码。
header(‘Content-Type:text/html;charset=utf-8’ );
$url = ”;
$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卡塔尔(قطر‎; //得到Mill军事网数据
$mierHtml =
iconv(“gbk”,”utf-8″,$mierHtml);
echo $mierHtml;

例2

 代码如下

<?php
/*
php 判断url页面是不是使用gzip压缩
*/
$ch = curl_init(“
curl_setopt($ch,CURLOPT_HTTPHEADER,array(‘Accept-Encoding:
gzip, deflate’));
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$buffer = curl_exec($ch);
$curl_info = curl_getinfo($ch);
curl_close($ch);
$header_size = $curl_info[“header_size”];
//尾部新闻长度
$headers = substr($buffer, 0,
$header_size);
//获取底部音信
$body = substr($buffer, $header_size);
//获取网页内容
 
function getEncoding(&$headers){
   
$arr=explode(“rn”,trim($headers));
    array_shift($arr);
    foreach($arr as
$header){
        list($k,$v)=explode(‘:’,$header);
        if (‘content-encoding’==strtolower($k)){
            return trim($v);
        }
    }
    return false;
}   
 
$encoding=getEncoding($headers);
 
if ($encoding) {
    echo “Using: “.$encoding;
}else{
    echo “None”;
}
 
?>
 

发表评论

电子邮件地址不会被公开。 必填项已用*标注