Обрабатывать ошибки из внешней библиотеки (simple_html_dom)

Я создаю страницу, чтобы сканировать некоторые веб-страницы.

Обычно это работает, но каждый время от времени не может захватить страницу и выдать следующую ошибку:

( ! ) Warning: file_get_contents(URLWASHERE): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in Z:\Wamp\www\spider\simple_html_dom.php on line 555

Вот как я хватаю страницу:

$page->load_file('URLWASHERE');

Есть ли способ выяснить, если эта ошибка происходит? Я не знаю, как это обнаружить, потому что это в библиотеке, а не в моем коде.

Я не могу использовать if (! $ page) потому что он все еще что-то возвращает. Но это что-то не кажется очень полезным, хотя это значительно короче.


Вы можете увидеть вывод здесь:

Страница $, когда успешно: http://pastebin.com/CnRVP6SK

Страница $ при сбое: http://pastebin.com/t9q6Gwnf


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

0

Решение

Вы можете использовать error_get_last() функция, чтобы получить информацию о последней ошибке. Вы также можете отключить предупреждение с помощью @ оператор.

@file_get_contents('http://example.com/wjqlshqwd');

$error = error_get_last();
if($error && strpos($error['message'], '404') !== false)
{
echo 'There was an error';
}

Также перед запуском этого кода вы должны сбросить состояние error_get_last(), комментарий на странице руководства PHP описывает хитрость, чтобы сделать это:

// var_dump or anything else, as this will never be called because of the 0
set_error_handler('var_dump', 0);
@$undef_var;
restore_error_handler();

// error_get_last() is now in a well known state:
// Undefined variable: undef_var

Идея в том, чтобы просто создать известную ошибку.

1

Другие решения

Кажется, я могу использовать

if(error_get_last())

проверить, была ли выдана ошибка до сих пор.

Это сломается, если возникнут другие ошибки, но мой код, кажется, не содержит ошибок, кроме этой случайной, поэтому я буду использовать это.

к сожалению, это позволит мне попробовать только дважды, а не продолжать, пока это не сработает.

0

По вопросам рекламы [email protected]