Я создаю страницу, чтобы сканировать некоторые веб-страницы.
Обычно это работает, но каждый время от времени не может захватить страницу и выдать следующую ошибку:
( ! ) 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
Я просто хочу выяснить, произошла ли ошибка, чтобы я мог повторить попытку моей программы.
Вы можете использовать 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
Идея в том, чтобы просто создать известную ошибку.
Кажется, я могу использовать
if(error_get_last())
проверить, была ли выдана ошибка до сих пор.
Это сломается, если возникнут другие ошибки, но мой код, кажется, не содержит ошибок, кроме этой случайной, поэтому я буду использовать это.
к сожалению, это позволит мне попробовать только дважды, а не продолжать, пока это не сработает.