获取 gzip 压缩时出现未定义的偏移量警告
Undefined offset warning on getting gzip compression
我的代码最初适用于大多数网站,但有些网站除外 (Facebook.com)。所以我插入 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
之后它开始为所有网站工作,甚至得到了我需要的正确结果。
我的问题是我在这条线上收到 Notice: Undefined offset: 1
:
list($k,$v)=explode(':',$header);
尽管我得到了正确的结果。
我注意到当我有 CURLOPT_FOLLOWLOCATION
行时我只得到 notice
但没有那行,我无法获得一些网站 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";
}
在调用explode
之前检查header是否包含:
。
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
稍后会混入其中。
我的代码最初适用于大多数网站,但有些网站除外 (Facebook.com)。所以我插入 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
之后它开始为所有网站工作,甚至得到了我需要的正确结果。
我的问题是我在这条线上收到 Notice: Undefined offset: 1
:
list($k,$v)=explode(':',$header);
尽管我得到了正确的结果。
我注意到当我有 CURLOPT_FOLLOWLOCATION
行时我只得到 notice
但没有那行,我无法获得一些网站 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";
}
在调用explode
之前检查header是否包含:
。
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
稍后会混入其中。