我正在构建一个页面来抓取一些网页。
它通常可以工作,但是每隔一段时间,它就会无法抓取页面,并抛出以下错误:
( ! ) 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),因为它仍会返回一些内容。但是这个东西看起来并没有什么帮助,尽管它显着缩短了。
您可以在此处查看输出:
成功时$ page:http://pastebin.com/CnRVP6SK
失败时$ page:http://pastebin.com/t9q6Gwnf
我只是希望能够找出是否有错误,以便我可以重新尝试我的程序。
答案 0 :(得分:1)
您可以使用error_get_last()
功能获取有关上一个错误的信息。您还可以考虑使用@
operator静音警告消息。
@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()
,a comment on the PHP manual page describes a trick to do that的状态:
// 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 :(得分:0)
似乎我可以使用
if(error_get_last())
检查到目前为止是否已抛出错误。
如果遇到其他错误,这将会中断,但除了偶尔的错误外,我的代码似乎没有错误,所以我会使用它。
不幸的是,这只会让我尝试两次,而不是继续尝试直到它起作用。