2010-10-02 2 views
3

Я пишу набор классов для искателя, он просматривает стартовую страницу, вытягивает три ссылки на основе параметров (найденных с использованием Simple Html Dom Parser, позволяющих использовать jquery-подобный селектор), сканирует эти страницы , затем переходит на страницу 2, выбирает следующие 3 страницы. Текущие максимальные страницы - 57 раз.Устранение PHP-приложения из памяти

Излишне говорить я получаю:

Разрешены памяти размером 50331648 байт исчерпаны сообщение об ошибке.

Есть ли способ, которым я могу избежать исчерпания memmory.

Чтобы сообщить вам, потянув содержимое первой страницы, запустите функцию go(), которая постоянно тянет страницы до тех пор, пока не будет достигнуто значение $ this-> maxpages. Полагаю, я мог бы запустить цикл при создании экземпляров классов, но это поможет.

ответ

5

Вы можете установить лимит памяти:

ini_set('memory_limit', '128M'); 

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

memory_get_usage() может быть полезен при отладке, в которой накапливается использование памяти.

Кроме того, если вы не используете PHP 5.3, вы можете рассмотреть возможность обновления с тех пор, как сборщик мусора лучше.

+0

Идеальный ответ, и я буду отмечать его как таковой. Просто, можете ли вы привести несколько примеров того, как освобождать данные/ссылки - это то же самое, что и разблокировать vars и т. Д.? –

+1

Если ссылка на какой-либо объект отсутствует, она в конечном итоге будет уничтожена. Итак '$ foo = new Foo(); $ foo = new Foo(); 'не будет утечка каких-либо данных ... Вам не нужно' unset() 'первый экземпляр. Но циклические ссылки (например, родительские ссылки child и дочерние ссылки parent) не будут освобождены <5.3. Таким образом, такие вещи будут нарастать в течение всего срока действия скрипта. Найдите более подробные справочные разделы по PHP. – Matthew

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