2009-07-27 5 views
8

Sto cercando di leggere i file xml compressi in php.PHP open gzipped XML

sono riuscito a leggere normali file XML, utilizzando XMLReader() in questo modo:

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

Tuttavia, questo non funziona quando il file XML viene compresso con gzip. Come posso decomprimere il file e leggerlo con XMLReader?

risposta

20

Come non è stato specificato una versione di PHP, ho intenzione di assumere che si sta utilizzando PHP5.

Mi chiedo perché la gente non ha suggerito di utilizzare il built-in PHP compression streams API.

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

Da quello che ho capito, sotto le coperte, sarà trasparente decomprimere il file per te e ti permettono di leggere come se fosse un file XML pianura. Ora, questo può essere un eufemismo grossolano.

+0

non sapevo che esistesse, eccellente suggerimento :) – Mark

+0

è davvero qualcosa di simile sto cercando ... ci proverò stasera ... – Fortega

+0

Grazie, funziona! – Fortega

3

Forse la funzione gzdecode potrebbe aiutare: il manuale dice (cito):

Decodifica una stringa gzip compressa

Quindi, dovreste:

  • scarica i dati XML
  • ottieni come stringa
  • decomprimerlo con gzdecode
  • lavoro su di esso con XMLReader

Questo dipenderà l'estensione destra (zlib credo) beeing installato sul server, anche se ...

Mark : Espansione sul post di Pascal, ecco alcuni esempi di codice che dovrebbero funzionare per voi

$xmlfile = fopen($linkToXmlFile,'rb'); 
$compressedXml = fread($xmlfile, filesize($linkToXmlFile)); 
fclose($xmlfile); 
$uncompressedXml = gzdecode($compressedXml); 

$xml = new XMLReader(); 
$xml->xml($uncompressedXml); 
1

Espansione sul post di Pascal, ecco qualche esempio di codice che dovrebbe funzionare per voi

$xmlfile = fopen($linkToXmlFile,'rb'); 
$compressedXml = fread($xmlfile, filesize($linkToXmlFile)); 
fclose($xmlfile); 
$uncompressedXml = gzdecode($compressedXml); 

$xml = new XMLReader(); 
$xml->xml($uncompressedXml); 
+0

Se si trattava solo di aggiungere un esempio di codice, perché non basta modificare il post dipendente e aggiungerlo? – hakre