2014-10-11 83 views
0

我正在构建抓取某些网页的页面。处理来自外部库的错误(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'); 

有没有办法找出是否发生错误?我不知道如何检测它,因为它在库中,而不是我的代码。

如果(!$ page)因为它仍然返回某些内容,我不能使用。但是,这似乎不是很有用,尽管它显着更短。


你可以看到此输出:

$页面时成功:http://pastebin.com/CnRVP6SK

$页面失败时:http://pastebin.com/t9q6Gwnf


我只是希望能够如果找出有一个错误,所以我可以让我的程序再试一次。

回答

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 

概念只是为了创造一个已知的错误。

0

看来我可以用

if(error_get_last()) 

检查错误迄今抛出。

这将打破,如果遇到其他错误,但我的代码似乎是没有错误的一边,从这个偶然的一个,所以我会用这个。

不幸的是,这样只会让我尝试了两次,而不是不断尝试,直到它的工作原理。

+0

一种方式来重置'error_get_last()'见我的回答 – Drahcir 2014-10-11 15:34:10

+0

哦真棒,我试图找到一种方式来做到这一点但有没有运气! – stackers 2014-10-11 15:42:01