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

Фатальная ошибка: Исчерпан допустимый размер памяти 268435456 байт.

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

где нужно.

Я работаю с простой библиотекой PHP dom с большим количеством URL-адресов (веб-сайтов), чтобы проверить их, хороши ли они (он проверяет теги iframe и embed в HTML, если есть теги iframe или embed с атрибутом SRC, отличным от 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();


     }

person BetterMan21    schedule 12.04.2012    source источник
comment
Вы подключаетесь к БД как часть вашего скрипта?   -  person Wandering Digital    schedule 12.04.2012
comment
Соединение делается 1 раз ДО цикла.   -  person BetterMan21    schedule 12.04.2012
comment
Вам нужно опубликовать более подробную информацию или упрощенную версию вашего кода.   -  person Eli    schedule 12.04.2012
comment
@user1316394 user1316394, вы можете ввести символ @, а затем ввести первые несколько букв имени человека, которому вы хотите ответить, должно появиться окно — щелкните его, чтобы автоматически вставить его имя в ваш комментарий, убедитесь, что другие уведомлены об этом. ваш комментарий. +1 за добавление кода.   -  person Ozzy    schedule 20.04.2012


Ответы (2)


Почему возникает утечка памяти, если методы clear(), null, unset и gc_collect_cycles вызываются каждый раз в конце цикла.

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

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

person hakre    schedule 12.04.2012
comment
Код извлекает URL-адреса из базы данных и зацикливает их. в цикле в начале цикла создается новый объект простой библиотеки dom для обработки HTML. - person BetterMan21; 12.04.2012
comment
@user1316394 user1316394 Итак, вот что он делает. Как это делается? Нам нужно увидеть ваш код. - person MetalFrog; 12.04.2012

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

$htm->__destruct();

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

$htm->clear();

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

person Dr Nick Engerer    schedule 29.08.2012