I am struggling to read gzipped xml files in php.
I did succeed in reading normal xml files, using XMLReader() like this:
$xml = new XMLReader();
$xml->open($linkToXmlFile);
However, this does not work when the xml file is gzipped. How can I unzip the file and read it with the XMLReader?
As you didn't specify a PHP version, I am going to assume you are using PHP5.
I am wondering why people haven't suggested using the built in PHP compression streams API.
$linkToXmlFile = "compress.zlib:///path/to/xml/file.gz";
$xml = new XMLReader();
$xml->open($linkToXmlFile);
From what I understand, under the covers, it will transparently decompress the file for you and allow you to read it as if were a plain xml file. Now, that may be a gross understatement.
Maybe the function gzdecode
could help you : the manual says (quote) :
Decodes a gzip compressed string
So, you'd have to :
- download the XML data
- get it as a string
- decompress it with
gzdecode
- work on it with
XMLReader
That would depend on the right extension (zlib
I guess) beeing installed on your server, though...
Mark: Expanding on Pascal's post, here is some example code that should work for you
$xmlfile = fopen($linkToXmlFile,'rb');
$compressedXml = fread($xmlfile, filesize($linkToXmlFile));
fclose($xmlfile);
$uncompressedXml = gzdecode($compressedXml);
$xml = new XMLReader();
$xml->xml($uncompressedXml);
Expanding on Pascal's post, here is some example code that should work for you
$xmlfile = fopen($linkToXmlFile,'rb');
$compressedXml = fread($xmlfile, filesize($linkToXmlFile));
fclose($xmlfile);
$uncompressedXml = gzdecode($compressedXml);
$xml = new XMLReader();
$xml->xml($uncompressedXml);