致命错误:允许的内存大小耗尽268435456字节。
我已经安装了 PHP 5.3 版本并添加了 gc_collect_cycles();
需要的地方。
我正在使用具有大量URL(网站)的PHP简单dom库来检查它们是否良好(它会检查HTML中的iframe和嵌入标签,如果有iframe或嵌入标签与SRC atrribute不同于youtube,metacafe或dailymotion会将URL标记为不好。
网站是我的(不刮任何人)。
如果每次在循环结束时调用 clear() 方法、null、unset 和 gc_collect_cycles,为什么会出现内存泄漏。
foreach ($data as $blog) {
$htm = file_get_html($blog['blogurl']);
if ($htm->find('iframe', 0)) {
foreach ($htm->find('iframe') as $if) {
if (! preg_match('/(dailymotion'.com|metacafe'.com|youtube'.com)/i', @ $if->src)) {
//this URL i
mark_url_not_good($blog['blogurl']);
$htm->clear();
$htm = null;
unset($htm);
gc_collect_cycles();
continue 2;
}
}
}
$htm->clear();
$htm = null;
unset($htm);
gc_collect_cycles();
}
如果每次在循环结束时调用 clear() 方法、null、unset 和 gc_collect_cycles,为什么会出现内存泄漏。
好吧,简单的dom库中可能只有一个内存泄漏,垃圾收集不会解决这个问题。如果不看到您的代码,就很难给出在这种情况下最好执行的操作的建议。
您可能希望将抓取功能替换为更原生的解析器,例如 DOMDocument
。
你真正需要的是:
$htm->__destruct();
以清除simple_html_dom内存,每次不再需要$htm信息。 例如,在你有以下情况的地方使用它:
$htm->clear();
请注意双下划线!