Почему функция PHP gzuncompress () может работать неправильно?

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;

Первый эхо обычно выводит сжатый файл с правильным заголовком (по крайней мере первые два байта верны). Если бы я скачал этот файл в своем браузере, я мог бы легко распаковать его.

Однако гзункомпресс брошен Warning: gzuncompress(): data error in /home/path/to/script.php on line 5

Кто-нибудь может указать мне правильное направление для решения этой проблемы?

РЕДАКТИРОВАТЬ:

Часть вывода phpinfo ()

введите описание изображения здесь

3

Решение

Или вы можете просто использовать правильную функцию декомпрессии, gzdecode().

7

Другие решения

Обратите внимание, что gzuncompress () может не распаковывать некоторые сжатые строки и возвращать ошибку данных.

Проблема может заключаться в том, что внешняя сжатая строка имеет контрольную сумму CRC32 в конце файла, а не Adler-32, как ожидает PHP.

(http://php.net/manual/en/function.gzuncompress.php#79042)

Это может быть вариантом того, почему это не работает.

Попробуйте с его кодом:

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;

Насколько я проверил локально, это больше не дает ошибки.

5

По вопросам рекламы [email protected]