PHP 判断是否 gzip 响应

今天项目中,遇到 Node.js 下的 Restify 模块使用了 Gzip Response 插件,在异常时不总是进行 gzip 输出,导致 PHP 在 gzdecode 时抛出错误,最后只能对接口模块进行了修改:

// 先设置 curlopt,添加响应头返回
curl_setopt($ch, CURLOPT_HEADER, true);

// 得到 response 后进行切割判断
$response = curl_exec($ch);
$httpInfo = curl_getinfo($ch);

list($header, $response) = explode("\r\n\r\n", $response, 2);
if (false !== strpos($header, 'Content-Encoding: gzip')) {
  // gzip 输出,执行解压
  $response = gzdecode($response);
}

// 这里可以放心使用 $response

然而,肥罗童鞋也给了另外一个方案,判断 $httpInfo[‘download_content_length’] 是否等于 -1,因为 gzip 的情况下,响应头是拿不到内容长度的 :)