处理来自外部库的错误(simple_html_dom)

时间:2014-10-11 14:52:32

标签: php 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),因为它仍会返回一些内容。但是这个东西看起来并没有什么帮助,尽管它显着缩短了。


您可以在此处查看输出:

成功时

$ page:http://pastebin.com/CnRVP6SK

失败时

$ page:http://pastebin.com/t9q6Gwnf


我只是希望能够找出是否有错误,以便我可以重新尝试我的程序。

2 个答案:

答案 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())

检查到目前为止是否已抛出错误。

如果遇到其他错误,这将会中断,但除了偶尔的错误外,我的代码似乎没有错误,所以我会使用它。

不幸的是,这只会让我尝试两次,而不是继续尝试直到它起作用。