Как исправить фатальную ошибку ограничения памяти Simple_DOM? - PullRequest
0 голосов
/ 28 апреля 2011

Кому-нибудь повезло с решением проблемы с памятью Simple_DOM?Я просмотрел эти форумы и нашел только рекомендации для других механизмов синтаксического анализа.

Мой скрипт просматривает 20 000 файлов и извлекает по одному слову из каждого.Я должен вызывать функцию file_get_html каждый раз.

  • Перенес его на другой сервер.Тот же результат.
  • Изменен цикл foreach на цикл while.
  • увеличивает ограничение памяти, либо сервер.не сработает.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2011

Мне кажется, что подход к обработке такого большого количества данных во время одного выполнения некорректен. По моему опыту, обработанный PHP-код не предназначен для работы в течение длительных периодов времени и обработки множества данных. Для этого требуется очень, очень осторожное управление памятью. Добавьте негерметичный сценарий третьей стороны, и у вас есть рецепт, чтобы биться головой об стол.

Возможно, вместо того, чтобы пытаться запустить все 20 тыс. Файлов одновременно, вы можете обрабатывать несколько сотен за раз, сохранять результаты где-то посредником, например, в базе данных MySQL, а затем собирать результаты после обработки всех файлов.

0 голосов
/ 28 апреля 2011

да, вы можете увеличить память с ini_set(), но только у вас есть разрешение на это. я рекомендую, когда вы проходите цикл, когда вы завершаете задачу, сбрасываете переменные, которые содержат большие наборы данных.

for($i=0;$i < 30000;$i++){
  $file = file_get_contents($some_path.$i);
  // do something, like write to file

  // unset the variables
  unset($file);
}

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

Желаю вам удачи:)

...