2011-09-07 58 views
3

我需要解析一個非常大的XML文件,文件大小爲750Mo!內存限制和非常大的XML文件

我meomy在512M

ini_set('memory_limit', '512M'); 

我沒有問題,打開30Mo下文件的限制,但隨着750Mo,我得到一個致命的錯誤

Fatal error: Allowed memory size of 1677721600 bytes exhausted (tried to allocate 2988843769 bytes) 

我這樣做,打開文件:

$fichier = file_get_contents($inputfileName); 
$xmlInput = simplexml_load_string(utf8_encode($fichier)); 

你有一個想法,打開這個文件?

+0

再次增加內存的限制......如果這不是一種選擇,你有什麼用文件的內容做?爲了給出進一步的建議,可能需要這些信息。 –

+0

我不明白爲什麼XML閱讀器需要分配文件大小的四倍。難道你不能'這樣或那樣'mmap',分割文件(根據結構),並用你最喜歡的XML閱讀器一次處理一個位? –

+0

使用XMLReader似乎可以解決問題 – bahamut100

回答

6

使用基於DOM的擴展會佔用更多的內存,因爲原始XML是因爲XML將被完全解析爲節點的樹結構。看看XMLReader而不是

XMLReader擴展是一個XML Pull解析器。閱讀器充當向文檔流前進的光標,並停在路上的每個節點上。

,並確保你有LIBXML_PARSEHUGE

解析另一種做法的event-based XMLParser

0

您想要一個SAX或其他基於事件的xml解析器。 Google'php sax解析器'。