如何避免file_get_contents错误:“无法解析主机名”

时间:2013-05-25 13:28:59

标签: php

我使用

成功获取网站
file_get_contents("http://www.site.com");

但是,如果网址确实存在或无法访问,我正在

Warning: file_get_contents(http://www.site.com) [function.file-get-contents]: 
failed to open stream: operation failed in /home/track/public_html/site.php 
on line 773

是否可以echo "Site not reachable";代替错误?

5 个答案:

答案 0 :(得分:8)

您可以将silence operator @$php_errormsg一起使用:

if(@file_get_contents($url) === FALSE) {
    die($php_errormsg);
}

@抑制错误消息的位置,消息文本可在$php_errormsg

中输出

但请注意,默认情况下会禁用$php_errormsg。你必须打开track_errors。所以在代码的顶部添加:

ini_set('track_errors', 1);

但是有一种方法不依赖于跟踪错误:

if(@file_get_contents($url) === FALSE) {
    $error = error_get_last();
    if(!$error) {
        die('An unknown error has occured');
    } else {
        die($error['message']);
    }
}

答案 1 :(得分:6)

我更愿意触发异常而不是错误消息:

function exception_error_handler($errno, $errstr, $errfile, $errline ) {
    // see http://php.net/manual/en/class.errorexception.php
    throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
}

set_error_handler("exception_error_handler");

现在您可以捕获这样的错误:

try {
    $content = file_get_contents($url);
} catch (ErrorException $ex) {
    echo 'Site not reachable (' . $ex->getMessage() . ')';
}

答案 2 :(得分:2)

这应该有效:

@file_get_contents("http://www.site.com");

@会抑制PHP输出的警告和错误。你必须自己处理一个空洞的回应。

答案 3 :(得分:1)

您可以使用curl来避免显示php错误:

    $externalUrl = ** your http request **

    curl_setopt($curl, CURLOPT_URL, $externalUrl); // Set the URL
    curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36'); // Use your user agent
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // Set so curl_exec returns the result instead of outputting it.
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // Bypass SSL Verifyers
    curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5);
    curl_setopt($curl, CURLOPT_TIMEOUT, 10);
    curl_setopt($curl, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/x-www-form-urlencoded'
    ));

    $result = curl_exec($curl); // send request
    $result = json_decode($result);

答案 4 :(得分:0)

您可以在PHP中关闭警告:

Turn off warnings and errors on php/mysql

参见文档:

http://il1.php.net/manual/en/function.file-get-contents.php

  

返回值:该函数返回读取数据或失败时返回FALSE。

在函数之前

或写@,以避免看错:

@file_get_contents(...