使用file_get_contents进行良好的错误处理

我正在使用具有以下功能的simplehtmldom:

// get html dom form file

function file_get_html() {

$dom = new simple_html_dom;

$args = func_get_args();

$dom->load(call_user_func_array('file_get_contents', $args), true);

return $dom;

}

我这样使用它:

$html3 = file_get_html(urlencode(trim("$link")));

有时,URL可能只是无效的,我想对此进行处理。我以为我可以使用try and catch,但是这没有用,因为它不会抛出异常,它只是给出了这样的php警告:

[06-Aug-2010 19:59:42] PHP Warning:  file_get_contents(http://new.mysite.com/ghs 1/) [<a href='function.file-get-contents'>function.file-get-contents</a>]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found  in /home/example/public_html/other/simple_html_dom.php on line 39

第39行在上面的代码中。

我如何正确处理此错误,我可以只使用普通if条件,它看起来不像返回布尔值。

谢谢大家的帮助

回答:

这是一个好的解决方案吗?

if(fopen(urlencode(trim("$next_url")), 'r')){

$html3 = file_get_html(urlencode(trim("$next_url")));

}else{

//do other stuff, error_logging

return false;

}

回答:

这是一个主意:

function fget_contents() {

$args = func_get_args();

// the @ can be removed if you lower error_reporting level

$contents = @call_user_func_array('file_get_contents', $args);

if ($contents === false) {

throw new Exception('Failed to open ' . $file);

} else {

return $contents;

}

}

基本上是的包装器file_get_contents。失败将引发异常。为了避免不得不覆盖file_get_contents自身,您可以

// change this

$dom->load(call_user_func_array('file_get_contents', $args), true);

// to

$dom->load(call_user_func_array('fget_contents', $args), true);

现在你可以:

try {

$html3 = file_get_html(trim("$link"));

} catch (Exception $e) {

// handle error here

}

错误抑制(通过使用@或通过降低error_reporting级别是一种

解决方案。这可能引发异常,您可以使用它来处理错误。有很多原因file_get_contents可能会生成警告,PHP手册本身建议降低error_reporting:请参见手册

以上是 使用file_get_contents进行良好的错误处理 的全部内容, 来源链接: utcz.com/qa/430709.html

回到顶部