我正在使用Simple Html Dom抓取这个巨大的xml文件(300k行~11MB)并且存在一些内存限制问题。所以我添加了一些php.ini命令来覆盖默认设置并启用对内存的完全控制。不好的主意。
我的代码:
include('simple_html_dom.php');
ini_set('memory_limit', '-1');
ini_set('max_execution_time', '-1');
$xml = file_get_contents('HugeFile.xml');
$xml2 = new simple_html_dom();
$xml2->load($xml);
foreach($xml2->find('tag1') as $element) {
$element->innertext = str_replace('text to replace','new text',$element>innertext);
}
$html->save('output'.xml');
}
现在,有没有办法让这个脚本在合理的时间内顺利运行而没有任何内存问题? 这可以通过文本编辑器轻松完成,但我需要自动化它,因为我有大量的文件需要编辑。
答案 0 :(得分:1)
找到了一种更好的方法:在这里不需要DOM,我只需str_replace
填充file_get_contents
返回的字符串,然后将其放在另一个file_put_contents
的文件中。简单明了:
$xml = file_get_contents('HugeFile.xml');
$new = str_replace('text to replace','new text',$xml);
file_put_contents('output.xml');
preg_replace
可能会对复杂的修改产生帮助。