我正在尝试使用 PHP Simple HTML Dom Parser 来解析来自某些站点的一些信息。什么和在哪里都无所谓。但它似乎存在一些巨大的内存问题。我设法将 html 代码削减到只有 6kB,但是找到一些元素并将它们保存到数据库的脚本甚至需要 700MB 的内存和超过 1GB 的虚拟内存!我在某处读到我应该使用 ->clear() 来释放一些内存,但似乎情况并非如此。
我使用str_get_html()
一次和五次->find()
将结果分配给变量。
$main_html = str_get_html($main_site);
$x = $main_html->find(...);
$y = $main_html->find(...);
etc.
例如,我在使用 $y 后尝试使用,但即使确实存在并且是真的$y->clear()
,我也会收到错误消息。甚至返回。_PHP Fatal error: Call to a member function clear() on a non-object
$y
if($y)
foreach($y) echo $y->plaintext
plaintext
$y
从 htop:
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
8839 username 20 0 1068M 638M 268 R 23.0 8.0 0:08.41 php myscript.php
怎么了?
简单测试:
echo "(MEM:".memory_get_usage()."->";
$product = $p->find('a',0)->href;
echo memory_get_usage()."->";
unset($product);
$p->clear();
unset($p);
echo memory_get_usage().")";
结果是:
(MEM:11865648->11866192->11865936)
更具可读性的形式:
11865648->
11866192-> (+544 in total)
11865936 (+288 in total)
当然我不能像它所说的那样使用 $product->clear()PHP Fatal error: Call to a member function clear() on a non-object