• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Объект Simple Html Dom

  • Автор темы sasha465
  • Дата начала
S

sasha465

У меня такой казалось бы тривиальный вопрос: как узнать (корректно) создался ли объект 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

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

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

Nord001

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

abushyk

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

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

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

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!