DNS 在 PHP 中不工作(但一般情况下可以)

DNS not working in PHP (but does in general)

以下脚本:

<?php
 $dnsrecs = dns_get_record('google.com'); foreach($dnsrecs as $dnsrec){ foreach($dnsrec as $label=>$val){ echo $label.':'. $val . '<br>'; } }


  echo file_get_contents('https://google.com'); 


?>

返回 DNS 记录列表,但最终在 file_get_contents 上失败,尽管 phpinfo() 说:

allow_url_fopen On  On
allow_url_include   Off

出现以下错误:

PHP message: PHP Warning: file_get_contents(https://google.com): failed to open stream: php_network_getaddresses: getaddrinfo failed: No address associated with hostname in /var/www/a.php on line 5" while reading response header from upstream, client: 152.66.34.10, server: xxx, request: "GET /a.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php-fpm-www.sock:", host: "xxx"

服务器上的DNS解析有效,与nginx相同的用户是运行:

# sudo -u www-data host google.com
google.com has address 216.58.212.142
google.com has IPv6 address 2a00:1450:400e:800::200e
google.com mail is handled by 50 alt4.aspmx.l.google.com.
google.com mail is handled by 10 aspmx.l.google.com.
google.com mail is handled by 30 alt2.aspmx.l.google.com.
google.com mail is handled by 40 alt3.aspmx.l.google.com.
google.com mail is handled by 20 alt1.aspmx.l.google.com.

我的 PHP 版本是最新的:

# php --version
PHP 5.5.9-1ubuntu4.21 (cli) (built: Feb  9 2017 20:54:58) 
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
    with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies

我是 运行 通过 php5-fpm,它似乎与此有关,因为 sudo -u www-data php a.php 工作正常。

我的 php.ini 文件在这里:http://pastebin.com/qZePJdT5 我的 phpinfo 在这里:http://pastebin.com/cAWuu8wr

谢谢。

我们在 Goolge public DNS 服务器上看到了这个确切的问题。我们通过简单地重新启动 PHP-FPM 来修复它。这个问题一直是一些推特讨论的主题:

https://twitter.com/laravelphp/status/844181376224165890

不过这似乎不是 DigitalOcean 特有的。

重新启动服务器 (linux) 并且不做任何更改解决了这个问题。