Мне нужно получить сжатый GZ XML-файл с удаленного сервера и проанализировать его с помощью simplexml_load_string
, Есть ли способ сделать это без распаковка GZ в файл, затем читать этот файл через simplexml_load_file
? Я хочу пропустить то, что кажется мне ненужным шагом.
Вы должны быть в состоянии сделать это с 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 на своем сервере разработки / производства.
Вы можете распаковать строку, используя 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 () может работать неправильно?
Или просто:
$sitemap = 'http://example.com/sitemaps/sitemap.xml.gz';
$xml = new SimpleXMLElement("compress.zlib://$sitemap", NULL, TRUE);