PHP简单的HTML Dom内存问题

时间:2010-07-21 22:10:01

标签: php dom parsing

我遇到了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');

但我仍然遇到内存问题......

4 个答案:

答案 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;可能效果更好 - 更直接的影响?