2011-09-07 57 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解析器'。