2012-04-12 2 views
2

Неустранимая ошибка: Допустимый размер памяти 268435456 байт исчерпан.PHP - Неустранимая ошибка: Допустимый размер памяти 268435456 байт исчерпан

Я установил версию PHP 5.3 и добавил gc_collect_cycles();

где необходимо.

Я работаю с простой библиотекой PHP с большим количеством URL-адресов (сайтов), чтобы проверить их, хороши ли они (проверяет iframe и внедряет теги в HTML, если есть iframe или вставлять теги с SRC atrribute different чем YouTube, Metacafe или Dailymotion пометит URL, как не хорошо.

сайты мои (не очищая никому).

Почему возникает утечка памяти, если метод ясно(), нулевой, отключенное и 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(); 


    } 
+0

Вы подключаетесь к БД как часть своего сценария? –

+0

Соединение выполняется 1 раз ПЕРЕД петлей. – BetterMan21

+1

Вам нужно разместить дополнительную информацию или упрощенную версию вашего кода. – Eli

ответ

2

Why there is memory leak if clear() method, null, unset and gc_collect_cycles is called everytime at the end of the loop.

Ну, может быть просто утечка памяти внутри библиотеки простой библиотеки, сбор мусора не будет исправлять это. Не видя своего кода, трудно дать предложения, которые лучше всего делать в этой ситуации.

Возможно, вы захотите заменить функциональность scrape на более собственный парсер, например DOMDocument.

+0

Код извлекает URL-адреса из базы данных и петли их. в цикле новый объект простой библиотеки dom создается в начале цикла для обработки HTML. – BetterMan21

+1

@ user1316394 Хорошо, так что * какой * он делает. * Как это делается? Нам нужно увидеть ваш код. – MetalFrog

+0

вопрос обновлен с кодом. – BetterMan21

1

, что вам действительно нужно:

$htm->__destruct(); 

, чтобы очистить simple_html_dom модуля памяти каждый раз, когда вы не нужны $ информация HTM больше. например используйте это, если у вас есть:

$htm->clear(); 

Обратите внимание на двойное подчеркивание!

Смежные вопросы