2009-07-27 12 views
8

Staram się czytać spakowane pliki xml w php.PHP open gzipped XML

I udało się czytać normalne pliki xml przy użyciu XMLReader() tak:

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

Jednak to nie działa, gdy plik xml jest skompresowane. Jak mogę rozpakować plik i odczytać go za pomocą XMLReader?

Odpowiedz

20

Jak nie określił wersję PHP, mam zamiar założyć używasz PHP5.

Zastanawiam się, dlaczego ludzie nie sugerowali korzystania z wbudowanego w PHP compression streams API.

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

Z tego co rozumiem, pod kołdrą, będzie przejrzysty rozpakować plik dla ciebie i pozwalają go odczytać tak, jakby były to zwykły plik xml. To może być niedopowiedzenie.

+0

nie wiedziałem, że istnieje, doskonała sugestia :) – Mark

+0

to jest rzeczywiście coś takiego Szukam ... Spróbuję tego wieczoru ... – Fortega

+0

Dzięki, to działa! – Fortega

3

Może funkcja gzdecode mógłby pomóc: instrukcja mówi (cytuję):

dekoduje skompresowane gzip ciąg

Więc trzeba by:

  • pobierz dane XML
  • pobierz jako ciąg
  • rozpakować go gzdecode
  • pracy na nim XMLReader

To zależy na właściwym rozszerzeniem (zlib chyba) beeing zainstalowanego na serwerze, chociaż ...

Mark : Po rozwinięciu postu Pascala, oto przykładowy kod, który powinien zadziałać:

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

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

Rozszerzenie na stanowisko Pascala, jest tu jakiś przykład kodu, który powinien pracować dla Ciebie

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

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

Jeśli chodziło o dodanie przykładowego kodu, dlaczego po prostu nie edytujesz zależnego postu i nie dodasz go? – hakre