Объект Simple Html Dom

sasha465

Well-known member
29.03.2009
69
0
#1
У меня такой казалось бы тривиальный вопрос: как узнать (корректно) создался ли объект simple html dom? Задача такая: скачиваю сайт с помощью curl, передаю его в функцию str_get_html и получаю объект класса simple_html_dom. Но иногда так получается что сайт, например, не скачался и я затем обращаюсь к методам объекта класса simple html dom, что вызывает фатальную ошибку. как я уже ни пробовал проверять создался ли он ни одна проверка не дает результатов. Вот пример кода:
PHP:
while(gettype($html)!='simple_html_dom' && $e<5){
$e++;
init_connect(&$curl);
$in=_GetContent($SA_copy["forums_wood"],&$curl);
$html=str_get_html($in);
}
- такая проверка вообще криво работает. Или:
PHP:
while(!is_object($html) && $e<5){
$e++;
init_connect(&$curl);
$in=_GetContent($SA_copy["forums_wood"],&$curl);
$html=str_get_html($in);
}
Или самый простой вариант:
PHP:
while(!isset($html) && $e<5){
$e++;
init_connect(&$curl);
$in=_GetContent($SA_copy["forums_wood"],&$curl);
$html=str_get_html($in);
}
переменная $e нужна, чтобы попыток было всего 5. Подскажите пожалуйста как можно узнать создался ли корректный объект?
 
C

Citsejam

#2
Проверяйте возвращаемый результат после обращение к сайту, если там есть данные значит дополнительно проверить на их валидность если нет, то ничего не создаем.

Можно поробовать в try обернуть
 

Nord001

New member
13.11.2008
1
0
#3
PHP:
$html = file_get_contents('http://www.google.ru');
$html = str_get_html( $html );
if($html) {
//делаем что надо
$html->clear();
unset($html);
}
 

abushyk

New member
19.09.2012
3
0
#4
Для полной уверенности в том, что вернулось то, что нужно, надо проверить на:
1) что вообще что-то вернулось if($html)
2) что то, что вернулось - объект is_object($html)
3) так как вернуться может любое текстовое содержание, а не структурированный html, то еще надо проверить на наличие узлов в объекте isset($html->nodes)

В итоге вот такое вот условие if($html && is_object($html) && isset($html->nodes)){}

Практическим путем проверено, что этого хватает.

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