PHP - 致命错误:允许的内存大小耗尽了 268435456 字节


PHP - Fatal error: Allowed memory size of 268435456 bytes exhausted

致命错误:允许的内存大小耗尽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();

请注意双下划线!