2

致命错误:已用完允许的 268435456 字节内存大小。

我已经安装了 PHP 5.3 版本并添加了 gc_collect_cycles();

需要的地方。

我正在使用具有大量 URL(网站)的 PHP 简单 dom 库来检查它们是否良好(它检查 iframe 并在 HTML 中嵌入标签,如果存在与 youtube、metacafe 不同的 SRC 属性的 iframe 或嵌入标签或 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();


     }
4

2 回答 2

2

如果每次在循环结束时调用 clear() 方法、null、unset 和 gc_collect_cycles,为什么会出现内存泄漏。

好吧,简单的 dom 库中可能只是内存泄漏,垃圾收集无法解决这个问题。在没有看到您的代码的情况下,很难给出在这种情况下最好做什么的建议。

您可能想用更原生的解析器(如DOMDocument.

于 2012-04-12T19:13:14.980 回答
1

你真正需要的是:

$htm->__destruct();

每次不再需要 $htm 信息时清除 simple_html_dom 内存。例如,在您拥有的地方使用它:

$htm->clear();

注意双下划线!

于 2012-08-29T01:14:23.677 回答