PHP Простой HTML Dom Проблема с памятью - PullRequest
5 голосов
/ 22 июля 2010

У меня проблемы с памятью при использовании PHP Simple HTML DOM Parser.Я анализирую документ достаточного размера и мне нужно запустить дерево DOM ...

1) Я начинаю с целого файла:

$html = file_get_html($file);

2), затем анализируюмоя таблица:

$table = $html->find('table.big'); 

3) затем анализирую мои строки:

$rows = $table[0]->find('tr');

В результате я получаю три объекта GIANT ... кто-нибудь знает, как сбросить объектпосле того, как я проанализировал данные, которые мне нужны?Как $ html бесполезен на шаге 3, так и является самым крупным из всех объектов.

Есть идеи?

Есть ли способ развернуть до моей строки таблицы исходный объект $ html?

Заранее спасибо.

РЕДАКТИРОВАТЬ:

Мне удалось пропустить второй шаг с:

$rows = $this->html->find('table.big tr');

Но я все еще сталкиваюсь с проблемами памяти...

Ответы [ 4 ]

21 голосов
/ 08 апреля 2011

Возможно, я немного опоздал ... чтобы ответить, когда я присоединился поздно ... поэтому приведенные выше ответы не верны.unset только удаляет $ html, а не его свойства.Таким образом, чтобы очистить память и запустить ее, проблема заключается в следующем:

используйте $html->clear();.

Я думаю, вы не читали код класса перед его использованием.Функция clear () уничтожает / освобождает память, израсходованную объектом $ html. Эта функция является внутренней функцией simple_html_dom. Эта функция немедленно вступает в силу.Таким образом, вам не нужно ждать завершения дня или завершения программы.

2 голосов
/ 27 марта 2012

Вы можете увеличить лимит памяти.

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

или очистить память с помощью этого кода

$html->__destruct();
unset($html);
$html = null;
1 голос
/ 22 июля 2010

Если память действительно очень важна, вы можете рассмотреть SAX вместо использования DOM. Возможно, вы захотите попробовать unset() на $html после получения $table, но это просто пометит его как сборщик мусора, и память не будет немедленно освобождена .

В конце концов, все зависит от того, как написан Simple HTML DOM с эффективным использованием памяти или какую реализацию вы выбрали.

0 голосов
/ 22 июля 2010

... как вывести объект после того, как я проанализировал его для данных, которые мне нужны?Например, $ html ...

unset($html)?

или $html = null; может работать лучше - больше немедленного эффекта?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...