У меня проблемы с памятью с 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');
Но я все еще сталкиваюсь с проблемами памяти …
Если память действительно вызывает большую озабоченность, вы можете захотеть просмотреть SAX вместо использования DOM. Вы можете попробовать unset()
в $html
после получения $table
, но это просто просто пометка, что это сбор мусора, и память не будет немедленно освобождена .
В конце концов, это действительно вопрос о том, как написанный на бумаге простой HTML DOM или какая реализация вы выбрали.
Возможно, я немного опоздаю … ответить, когда я присоединился к концу … поэтому приведенные выше ответы неверны. unset only unsets $ html не его свойства. Поэтому для очистки памяти и устранения проблемы с памятью:
используйте $html->clear();
,
Я думаю, что вы уже прочитали код класса, прежде чем использовать его. Функция clear () уничтожает / освобождает память, потребляемую объектом $ html. Эта функция является внутренней функцией simple_html_dom. Эта функция сразу же вступает в силу. Так что вам не нужно ждать целый день или прекращение программы для вступления в силу.
Вы можете увеличить лимит памяти.
ini_set('memory_limit', '64M');
или очистить память с помощью этого кода
$html->__destruct(); unset($html); $html = null;
с$html->__destruct(); unset($html); $html = null;
… как сбрасывать объект после того, как я проанализировал его для данных, которые мне нужны? Как $ html …
unset($html)
?
или $html = null;
может работать лучше – больше немедленного воздействия?