PHP открытый gzipped XML

Я изо всех сил пытаюсь читать gzipped xml-файлы в php.

Мне удалось прочитать нормальные xml-файлы, используя XMLReader () следующим образом:

$xml = new XMLReader(); $xml->open($linkToXmlFile); 

Однако это не работает, когда файл xml gzipped. Как я могу разархивировать файл и прочитать его с помощью XMLReader?

Поскольку вы не указали версию PHP, я предполагаю, что вы используете PHP5.

Мне интересно, почему люди не предлагали использовать встроенный API-интерфейсы потоков сжатия PHP .

 $linkToXmlFile = "compress.zlib:///path/to/xml/file.gz"; $xml = new XMLReader(); $xml->open($linkToXmlFile); 

Из того, что я понимаю, под обложками, он будет прозрачно распаковывать файл для вас и позволит вам читать его, как если бы это был простой XML-файл. Теперь это может быть грубое преуменьшение.

Возможно, функция gzdecode может вам помочь: руководство говорит (цитата):

Декодирует сжатую строку gzip

Итак, вам нужно:

  • загрузить данные XML
  • получить его как строку
  • распаковать его с помощью gzdecode
  • работать с ним с помощью XMLReader

Это будет зависеть от правильного расширения ( zlib я думаю), установленного на вашем сервере, хотя …

Марк : Расширяясь на посту Паскаля, вот пример кода, который должен сработать для вас

 $xmlfile = fopen($linkToXmlFile,'rb'); $compressedXml = fread($xmlfile, filesize($linkToXmlFile)); fclose($xmlfile); $uncompressedXml = gzdecode($compressedXml); $xml = new XMLReader(); $xml->xml($uncompressedXml); 

Расширяясь на посту Паскаля, вот пример кода, который должен работать для вас

 $xmlfile = fopen($linkToXmlFile,'rb'); $compressedXml = fread($xmlfile, filesize($linkToXmlFile)); fclose($xmlfile); $uncompressedXml = gzdecode($compressedXml); $xml = new XMLReader(); $xml->xml($uncompressedXml);