2009-07-27 21 views
8

Tôi đang đấu tranh để đọc các tệp xml gzipped trong php.PHP mở gzipped XML

tôi đã thành công trong việc đọc file xml bình thường, sử dụng XMLReader() như thế này:

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

Tuy nhiên, điều này không hoạt động khi file xml được gzip. Làm thế nào tôi có thể giải nén tập tin và đọc nó với XMLReader?

Trả lời

20

Như bạn không chỉ định một phiên bản PHP, tôi sẽ giả sử bạn đang sử dụng PHP5.

Tôi tự hỏi tại sao mọi người không đề xuất sử dụng được xây dựng trong PHP compression streams API.

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

Từ những gì tôi hiểu, dưới tấm chăn, nó sẽ minh bạch giải nén file cho bạn và cho phép bạn đọc nó như thể là một tập tin xml đồng bằng. Bây giờ, đó có thể là một cách nói chung.

+0

không biết nó tồn tại, gợi ý tuyệt vời :) – Mark

+0

nó thực sự là một cái gì đó như thế này tôi đang tìm kiếm ... Tôi sẽ thử nó tối nay ... – Fortega

+0

Cảm ơn, nó hoạt động! – Fortega

3

Có lẽ chức năng gzdecode có thể giúp bạn: hướng dẫn nói (trích dẫn):

Giải mã một chuỗi gzip nén

Vì vậy, bạn phải:

  • tải xuống dữ liệu XML
  • tải xuống dưới dạng chuỗi
  • giải nén nó với gzdecode
  • làm việc trên nó với XMLReader

Điều đó sẽ phụ thuộc vào phần mở rộng đúng (zlib tôi đoán) beeing được cài đặt trên máy chủ của bạn, mặc dù ...

Mark : Mở rộng trên bài đăng của Pascal, dưới đây là một số mã ví dụ sẽ hoạt động cho bạn

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

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

Mở rộng trên bài Pascal, đây là một số mã ví dụ mà nên làm việc cho bạn

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

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

Nếu đó là tất cả về việc thêm một ví dụ mã, tại sao bạn không chỉ chỉnh sửa bài đăng tùy thuộc và thêm nó? – hakre