6

我成功地获取网站

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

但是,如果 url 不存在或无法访问,我会得到

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";代替错误?

4

5 回答 5

8

您可以将静音运算符 @$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']);
    }
}
于 2013-05-25T13:31:26.733 回答
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() . ')';
}
于 2013-05-25T13:34:53.430 回答
2

这应该有效:

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

@抑制 PHP 输出的警告和错误。那么你将不得不自己处理一个空的响应。

于 2013-05-25T13:31:35.940 回答
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);
于 2018-04-30T09:44:48.547 回答
0

您可以在 PHP 中关闭警告:

关闭 php/mysql 上的警告和错误

请参阅文档:

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

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

或在函数之前写@,以避免看到错误:

@file_get_contents(...

于 2013-05-25T13:34:02.450 回答