PHP: Как распаковать GZ в строку?

Мне нужно получить сжатый XML-файл GZ с удаленного сервера и проанализировать его с помощью simplexml_load_string. Есть ли способ сделать это без распаковки GZ в файл, а затем чтение этого файла через simplexml_load_file? Я хочу пропустить то, что кажется мне ненужным шагом.


person StackOverflowNewbie    schedule 09.12.2015    source источник


Ответы (3)


Вы сможете сделать это с помощью функции gzdecode из библиотеки Zlib.

$uncompressedXML = gzdecode(file_get_contents($url));

Подробнее о gzdecode() из документации по PHP.

Однако есть еще более простой способ — использование оболочки сжатия.

$uncompressedXML= file_get_contents("compress.zlib://{$url}");

Или еще лучше:

$xmlObject=simplexml_load_file("compress.zlib://{$url}");

Не забудьте установить и включить Zlib на вашем сервере разработки/производства.

person Inigo Flores    schedule 09.12.2015

Вы можете распаковать строку с помощью gzuncompress(), но есть некоторые недостатки использования gzuncompress, такие как ограничение длины строки и некоторые проблемы с контрольной суммой.

Вы можете добиться ожидаемого результата с помощью этого сокращенного кода, но я предлагаю проверить дополнительные ресурсы в зависимости от того, как данные (вы получаете) сжаты.

<?php
$compressed   = gzcompress('<?xml version="1.0" encoding="UTF-8"?><note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Dont forget me this weekend!</body></note>', 9);
$uncompressed = gzuncompress($compressed);
$xml = simplexml_load_string($uncompressed);
var_dump($xml);

http://php.net/manual/en/function.gzcompress.php

http://php.net/manual/en/function.gzdecode.php

http://php.net/manual/tr/function.gzuncompress.php

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

person Ugur    schedule 09.12.2015

Или просто:

$sitemap  = 'http://example.com/sitemaps/sitemap.xml.gz';
$xml = new SimpleXMLElement("compress.zlib://$sitemap", NULL, TRUE);
person AK47    schedule 09.12.2015