Объект Simple Html Dom

Тема в разделе "PHP программирование", создана пользователем sasha465, 10 июл 2012.

  1. sasha465

    sasha465 Well-Known Member

    Регистрация:
    29 мар 2009
    Сообщения:
    69
    Симпатии:
    0
    У меня такой казалось бы тривиальный вопрос: как узнать (корректно) создался ли объект 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. Подскажите пожалуйста как можно узнать создался ли корректный объект?
     
  2. Citsejam

    Citsejam Гость

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

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

    Nord001 New Member

    Регистрация:
    13 ноя 2008
    Сообщения:
    1
    Симпатии:
    0
    Код (PHP):
    $html = file_get_contents('http://www.google.ru');
    $html = str_get_html( $html );
    if($html) {
    //делаем что надо
    $html->clear();
    unset($html);
    }
     
  4. abushyk

    abushyk New Member

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

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

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

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

Поделиться этой страницей