【问题标题】:Preventing php_network_getaddresses: getaddrinfo failed:防止 php_network_getaddresses:getaddrinfo 失败:
【发布时间】:2014-10-15 08:51:54
【问题描述】:

我正在尝试使用 PHP 调用 URL 以检查它是否存在并且是否可访问。

我的初始代码是

fopen('http://'.$this -> url, 'r');

但每次 URL 无法访问时都会引发以下错误:

fopen(http://dwzegdzgwedzgew.com): failed to open stream: php_network_getaddresses: getaddrinfo failed
php_network_getaddresses: getaddrinfo failed:

在这种情况下,错误运算符 (@) 将被忽略,因为错误不是由 fopen 本身引发的,而是在解析 asdress 时引发的。所以我认为应该这样做:

 @fopen(@'http://'.$this -> url, 'r');

但它也会继续抛出错误。

在打开 URL 之前,是否可以检查 PHP 中是否存在不抛出错误的可能性?

【问题讨论】:

    标签: php fopen getaddrinfo


    【解决方案1】:

    $ressource = @fopen('http://' . $this->url, 'r'); 的错误信息是什么?

    <?php
    
    
    $urls = array('kihgkighuhgkig.li', 'google.com', 'adsfafdf.fr');
    foreach ($urls as $url)
    {
        if (gethostbyname($url) != $url)
        {
            $ressource = fopen('http://' . $url, 'r');
            var_dump($url, $ressource);
        }
    }
    

    输出是:

    $> php test.php
    string(10) "google.com"
    resource(6) of type (stream)
    

    【讨论】:

    • fopen(kihgkighuhgkig.li):无法打开流:php_network_getaddresses:getaddrinfo 失败:Der angegebene Host ist unbekannt。编辑:对不起德语,“未知主机”
    • 您可以在使用 fopen 之前尝试 ping 请求。但如果它在生产中,隐藏错误error_reporting(0);
    • 我无法隐藏整个项目的错误,因为该项目有自己的错误处理。此外,要在 PHP 中 ping,您需要创建一个套接字,这会引发完全相同的错误,并且在尝试解析主机时会在 OP 中出现上述问题。
    • 我已经编辑了我之前的答案,添加了一些代码,它有效吗?
    猜你喜欢
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    相关资源
    最近更新 更多