php - 获取gzip压缩时出现 undefined offset 警告

标签 php curl error-handling gzip

我的代码最初适用于大多数网站,但不包括(Facebook.com)。因此,我插入了curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);,此后它开始在所有网站上运行,甚至获得了所需的正确结果。

我的问题是我在此行上收到Notice: Undefined offset: 1:

list($k,$v)=explode(':',$header);

即使我得到正确的结果。

我注意到我只有在拥有notice行的情况下才得到CURLOPT_FOLLOWLOCATION,但是如果没有该行,我将无法获得某些网站的gzip压缩信息

我的代码:
$ch = curl_init("http://facebook.com/");
curl_setopt($ch,CURLOPT_HTTPHEADER,array('Accept-Encoding: gzip, deflate'));
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 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("\r\n",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";
}

最佳答案

在调用:之前,请检查 header 是否包含explode

foreach($arr as $header){
    if (strstr($header, ':')) {
        list($k,$v)=explode(':',$header);
        if ('content-encoding'==strtolower($k)){
            return trim($v);
        }
    }
}

这将忽略任何不是Name: value形式的 header 。如果响应以100 Continue开头,则可能会发生这种情况,因为200 HTTP/1.1稍后会混入其中。

关于php - 获取gzip压缩时出现 undefined offset 警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35761937/

相关文章:

php - 将函数从递归转换为迭代

php - MySQL 错误 1045 访问被拒绝

javascript - 公理错误 : getaddrinfo ENOTFOUND

ios - 如何使用 grep 和 regex 提取特定标签内的信息

php - 从mysqli_query()返回数组

matlab - 在Matlab中防止 “MATLAB:unassignedOutputs”

javascript - Php 和 JQuery - 如何对访问站点页面的计算机可见的页面更改

php - 如何避免 if/elseif 重复?

mysql - 在 bash 中将标准输出转换为 utf8

perl - 分配给 $!在 Perl 中?