内存限制和非常大的XML文件


Memory limit and very big XML file

我需要解析一个非常大的XML文件,文件大小为750Mo !

我的内存限制为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));

你知道如何打开这个文件吗?

使用基于DOM的扩展将占用更多的内存,因为原始XML将被完全解析为节点的树结构。看一下XMLReader

XMLReader扩展是XML Pull解析器。阅读器充当在文档流上向前移动的游标,并在前进过程中停在每个节点上。

并确保使用LIBXML_PARSEHUGE

进行解析

另一个选择是基于事件的XMLParser

需要SAX或其他基于事件的xml解析器。Google 'php sax parser'.

对于大文件,最好使用XMLReader类。但如果喜欢simplexml:

代码:https://github.com/dkrnl/SimpleXMLReader/blob/master/library/SimpleXMLReader.php

使用示例:http://github.com/dkrnl/SimpleXMLReader/blob/master/examples/example1.php