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.88.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 错误

file_get_contents() 是不是有超时设置?

file_get_contents 通过 php 失败,通过浏览器工作

file_get_contents 不适用于某些 url

为啥 file_get_contents 比 memcache_get 快?