我需要解析一个非常大的XML文件,文件大小为750Mo!
我有512M的meomy限制
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 :(得分:6)
使用基于DOM的扩展将占用更多的内存,因为原始XML是因为XML将被完全解析为节点的树结构。请查看XMLReader而不是
XMLReader扩展是一个XML Pull解析器。读取器在文档流上作为光标前进,并在途中停在每个节点上。
并确保使用LIBXML_PARSEHUGE
另一种选择是event-based XMLParser
答案 1 :(得分:0)
您需要SAX或其他基于事件的xml解析器。谷歌'php sax解析器'。
答案 2 :(得分:0)
对于大文件,完美使用XMLReader类。但如果喜欢simplexml:
代码:https://github.com/dkrnl/SimpleXMLReader/blob/master/library/SimpleXMLReader.php
用法示例:http://github.com/dkrnl/SimpleXMLReader/blob/master/examples/example1.php