2009-07-27 8 views
8

J'ai du mal à lire les fichiers XML gzippés en php.PHP ouvert gzippé XML

J'avons réussi à la lecture des fichiers xml normaux, en utilisant XMLReader() comme ceci:

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

Cependant, cela ne fonctionne pas lorsque le fichier xml est gzip. Comment puis-je décompresser le fichier et le lire avec XMLReader?

Répondre

20

Comme vous ne l'avez pas spécifié une version PHP, je vais supposer que vous utilisez PHP5. Je me demande pourquoi les gens n'ont pas suggéré d'utiliser le PHP compression streams API intégré.

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

D'après ce que je comprends, sous les couvertures, il transparente décompressez le fichier pour vous et vous permettre de lire comme si étaient un fichier Xml. Maintenant, cela peut être un euphémisme.

+0

ne savait pas qu'il existait, excellente suggestion :) – Mark

+0

c'est en effet quelque chose comme ça que je cherche ... Je vais l'essayer ce soir ... – Fortega

+0

Merci, ça marche! – Fortega

3

Peut-être la fonction gzdecode pourrait vous aider: le manuel dit (citation):

décode une chaîne compressée gzip

Alors, vous auriez à:

  • télécharger les données XML
  • obtenir comme une chaîne
  • décomprimer avec gzdecode
  • travaux avec XMLReader

Cela dépendra de la bonne extension de (zlib je suppose) beeing installé sur votre serveur, mais ...

Mark : Expansion sur le post de Pascal, voici un exemple de code qui devrait fonctionner pour vous

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

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

expansion sur le poste de Pascal, est un code d'exemple ici qui devrait fonctionner pour vous

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

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

S'il s'agissait d'ajouter un exemple de code, pourquoi ne pas simplement éditer le post dépendant et l'ajouter? – hakre