file_get_contents():php_network_getaddresses:getaddrinfo失败:名称或服务未知
Posted
技术标签:
【中文标题】file_get_contents():php_network_getaddresses:getaddrinfo失败:名称或服务未知【英文标题】:file_get_contents(): php_network_getaddresses: getaddrinfo failed: Name or service not known 【发布时间】:2013-12-02 13:58:25 【问题描述】:我正在尝试使用我在 xampp 服务器上的网站上的 php 脚本从服务器下载图像。
正在使用函数 file_get_contents 下载图像。
服务器上下载的php代码为:
if(isset($_GET['path']) && isset($_GET['username']))
echo "path:".$_GET['path'];
$temp = explode(".", $_GET['path']);
$extension = end($temp);
$fname="images/".$_GET['title'];
$filenameIn = $_GET['path'];
$filenameOut = "" . $fname;
$contentOrFalseOnFailure = file_get_contents($filenameIn);
$byteCountOrFalseOnFailure = file_put_contents($filenameOut,$contentOrFalseOnFailure);
但我收到此错误:
警告:file_get_contents(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /opt/lampp/htdocs/xampp/project/upload_art.php 在第 19 行
警告:file_get_contents(http://app6.pixlr.com/_temp/528afa6e2f7cc6a5b1000101.jpg): 无法打开流:php_network_getaddresses:getaddrinfo 失败: 名称或服务未知 /opt/lampp/htdocs/xampp/project/upload_art.php 在第 19 行
我在这里查看了所有发布的答案,但似乎没有一个可以解决问题。请帮忙!
【问题讨论】:
做这个 filenameIn=trim(filenameIn); $contentOrFalseOnFailure = file_get_contents($filenameIn); PHP : file_get_contents($loc) fails的可能重复 【参考方案1】:这意味着你的服务器无法连接到外部世界
考虑到 DNS 问题,这可能不会改变任何事情
所以,如果您有权限,请尝试将 /etc/resolv.conf 文件中的名称服务器更改为其他名称服务器。
【讨论】:
像什么?我只有一个IP 我已经添加了8.8.8.8
和8.8.4.4
,问题就消失了!【参考方案2】:
应该也允许 httpd 连接到外部。检查你的 selinux 政策。 这有助于我解决连接问题:
setsebool -P nis_enabled 1
setsebool -P httpd_can_network_connect 1
【讨论】:
同样的事情,但这些选项都没有帮助。 还有这个:setsebool -P httpd_verify_dns=1
,别忘了重启:;)sudo systemctl restart httpd
【参考方案3】:
参考@DUzun 的其中一个 cmets,对于像我这样熟悉服务器但不是计算机科学专业的人,我在 Linux/Centos6 (Plesk Onyx) 上解决了这个问题 作者:
1) 打开/etc/resolv.conf
(我的文件是空的)
2) 补充:
nameserver 8.8.8.8
nameserver 8.8.4.4
options rotate
options timeout:3
希望这对那里的人有所帮助。
【讨论】:
我在 Windows 10 机器上的本地主机上遇到了这个问题。我正在使用 Xampp。有什么建议吗?【参考方案4】:如果您将 Docker env 用于 Web 应用程序,以下是一些建议。 我在使用 docker php 映像时遇到了同样的问题,在 yml 文件中添加了 dns 选项解决了我的问题。
docker-compose.yml
version: '2'
services:
webserver:
build: ./docker/webserver
image: my_webapp
dns: 8.8.8.8
dns_opt:
- use-vc
- no-tld-query
ports:
- 80:80
- 443:443
volumes:
- ./:/var/www/html
【讨论】:
【参考方案5】:如果您在 smtp_host fsockopen() 调用中使用名称而不是 IP 地址,并且您的服务器无法将该名称解析为 IP 地址。如果可能,找出您尝试连接的服务器的 IP,然后使用它。希望它会正常工作。 示例
$config = Array(
'protocol' => 'smtp',
'smtp_host' => '166.62.73.4', // mail.servername.com
'smtp_port' => 587,
'smtp_timeout' => '7',
'smtp_user' =>'test@servername.com',
'smtp_pass' => 'password',
'_smtp_auth' => false,
'mailtype' => 'html',
'charset' => 'iso-8859-1',
'crlf' => '\r\n',
'newline' => "\r\n"
);
【讨论】:
【参考方案6】:当我在 url 中有错字时,我遇到了这个错误。域必须存在:-)
【讨论】:
在 Google 上搜索 10 分钟,然后我发现我写的是“localhsot”而不是“localhost”以上是关于file_get_contents():php_network_getaddresses:getaddrinfo失败:名称或服务未知的主要内容,如果未能解决你的问题,请参考以下文章
file_get_contents() 分解 UTF-8 字符
file_get_contents(): No such host is known 错误