我遇到了PHP Simple HTML DOM Parser的内存问题。我正在解析一个大小合适的文档,需要运行DOM树...
1)我从整个文件开始:
$html = file_get_html($file);
2)然后解析我的表:
$table = $html->find('table.big');
3)然后解析我的行:
$rows = $table[0]->find('tr');
我最终得到的是三个GIANT对象......在解析了我需要的数据之后,谁知道如何转储对象?就像$ html在步骤3中没用,但它是所有对象中最大的。
有什么想法吗?
有没有办法从原来的$ html对象中深入到我的表行?
提前致谢。
编辑:
我设法跳过第二步:
$rows = $this->html->find('table.big tr');
但我仍然遇到内存问题......
答案 0 :(得分:20)
我可能会迟到......因为我迟到了回答...所以上面给出的答案是不正确的。 unset只取消设置$ html而不是其属性。因此,清理内存并启动内存问题是:
使用$html->clear();
。
我认为你在使用之前没有读过类代码。 clear()函数销毁/释放由$ html对象占用的内存。这个函数是simple_html_dom的内部函数。这个函数立即生效。所以你不必等待一整天或程序终止才能生效。
答案 1 :(得分:2)
您可以增加内存限制。
ini_set('memory_limit', '64M');
或使用此代码清除内存
$html->__destruct();
unset($html);
$html = null;
答案 2 :(得分:1)
如果内存确实是一个大问题,您可能需要查看SAX而不是使用DOM。获取unset()
后,您可能想在$html
上尝试$table
,但这只是将其标记为垃圾回收而内存不会立即释放。
在一天结束时,真正取决于如何编写具有内存效率的简单HTML DOM或您选择的实现。
答案 3 :(得分:0)
...我以后如何转储对象 为我需要的数据解析它?喜欢 $ HTML ...
unset($html)
?
或$html = null;
可能效果更好 - 更直接的影响?