PHP处理错误

时间:2010-08-11 13:21:58

标签: php

将此代码与simplehtmldom脚本(http://simplehtmldom.sourceforge.net/manual.htm)一起使用:

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;
}

$url = 'http://site.com/';
$html = file_get_html($url);

如何处理file_get_html($url)部分的错误?现在,如果页面不存在,则在浏览器窗口中显示错误。我喜欢抓住它们并显示我的文字,例如:

if(some error happened on file_get_html($url)) {
   $errors = true;
} else {
   html = file_get_html($url);
}

感谢。

2 个答案:

答案 0 :(得分:6)

您好 您需要检查404 Not Found消息,因为在任何情况下都返回了一个数组。

function url_exists($url){
if ((strpos($url, "http")) === false) $url = "http://" . $url;
$headers = @get_headers($url);
//print_r($headers);
if (is_array($headers)){
    //Check for http error here....should add checks for other errors too...
    if(strpos($headers[0], '404 Not Found'))
        return false;
    else
        return true;    
}         
else
    return false;
}

答案 1 :(得分:4)

<击> 尝试将try-catch这样放在你的函数中:

try{
    $dom->load(call_user_func_array('file_get_contents', $args), true);
    return $dom;
}
catch(Exception $e){
  //echo $e->getMessage();
  throw new Exception('could not load the url');
}

<击>

<强>更新

或者您可以使用此功能查看远程链接是否确实存在:

function url_exists($url){
    if ((strpos($url, "http")) === false) $url = "http://" . $url;
    if (is_array(@get_headers($url)))
         return true;
    else
         return false;
}

以下是如何使用上述功能:

function file_get_html() {
    $args = func_get_args();

    if (url_exists($args)) {
      $dom = new simple_html_dom;
      $dom->load(call_user_func_array('file_get_contents', $args), true);
      return $dom;
    }
    else {
      echo "The url isn't valid";
      return false;
    }
}