PHP有自己的功能来处理gzip档案。我写了以下代码:
error_reporting(E_ALL);
$f = file_get_contents('http://spiderbites.nytimes.com/sitemaps/www.nytimes.com/sitemap.xml.gz');
echo $f;
$f = gzuncompress($f);
echo "<hr>";
echo $f;
第一个echo通常会输出带有正确标头的压缩文件(至少前两个字节是正确的)。如果我使用浏览器下载此文件,我可以轻松解压缩。
然而gzuncompress抛出Warning: gzuncompress(): data error in /home/path/to/script.php on line 5
有人能指出我正确的方向来解决这个问题吗?
修改
phpinfo()输出部分
答案 0 :(得分:7)
或者您可以使用正确的解压缩功能gzdecode()
。
答案 1 :(得分:6)
请注意,gzuncompress()可能无法解压缩某些压缩字符串并返回数据错误。
问题可能是外部压缩字符串在文件末尾有一个CRC32校验和,而不是像PHP期望的那样在Adler-32上。
这可能是为什么它不起作用的选择。
尝试使用他的代码:
function gzuncompress_crc32($data) {
$f = tempnam('/tmp', 'gz_fix');
file_put_contents($f, "\x1f\x8b\x08\x00\x00\x00\x00\x00" . $data);
return file_get_contents('compress.zlib://' . $f);
}
修改您的代码:
error_reporting(E_ALL);
$f = file_get_contents('http://spiderbites.nytimes.com/sitemaps/www.nytimes.com/sitemap.xml.gz');
echo $f;
$f = gzuncompress_crc32($f);
echo "<hr>";
echo $f;
据我在本地测试,它不再给出错误。