为了账号安全,请及时绑定邮箱和手机立即绑定

函数 file_get_contents() 出错:是否涉及 dns?

函数 file_get_contents() 出错:是否涉及 dns?

PHP
慕斯709654 2021-11-13 17:19:03
我正在尝试运行一个托管在远程虚拟服务器上的小型网站。当我通过 Apache 2.0 在我的机器上本地运行测试时,我的代码运行良好。现在它是远程托管的(Apache 2 + Webmin + PHP 的最新版本),似乎我对著名的函数 file_get_contents 有一些问题。看起来我的服务器不允许解析任何外部域。我阅读了多个主题并尝试了许多解决方案,但到目前为止似乎没有一个有效。这是我有问题的功能$url='https://bitpay.com/api/rates';$json=json_decode( file_get_contents( $url ) );$dollar=$btc=0;foreach( $json as $obj ){    if( $obj->code=='USD' )$btc=$obj->rate;}echo "1 bitcoin=\$" . $btc . "USD<br />";$dollar=1 / $btc;echo "10 dollars = " . round( $dollar * 10,8 )."BTC";exit();无论我尝试什么,都会以这个错误返回给我Warning: file_get_contents(): php_network_getaddresses: getaddrinfo failed: Name or service not known in我试图在我的服务器上找到文件 etc/host 但它不存在。我不知道如何设置/参数任何主机名。我的 Webmin 面板中没有很多选项,所以我想知道我可以做些什么来解决这个问题。我allow_url_fopen = on在我的代码中添加了这一行,但它也不起作用。最后,我尝试了很多人建议的 curl 替代方案。但是当我尝试echo或print_r输出/结果时,我得到一个空白页。甚至没有一个错误消息。
查看完整描述

3 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

任何人都可以在没有访问 hosts.conf 文件的情况下解决这个问题?


查看完整回答
反对 回复 2021-11-13
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

我对我的 php.ini 文件做了一些更改。


这是我当前 php.ini 文件的内容


allow_url_fopen = On;

ini_set('display_errors', 1);

ini_set('display_startup_errors', 1);

error_reporting(E_ALL);

但我意识到一些有趣的事情:关于这条线


ini_set('display_errors', 1);


如果我不将它添加到我的代码所在的 php 文件中,则不会显示错误。似乎我的 ini 文件不是正确的位置或服务器考虑的位置。


我真的很困惑,因为它与本地托管非常不同


我觉得我的服务器配置为空。


在 etc 目录中找不到任何配置文件,我的 php.ini 文件显然“不起作用”。


查看完整回答
反对 回复 2021-11-13
?
倚天杖

TA贡献1828条经验 获得超3个赞

file_get_contents 不允许获取外部 url,直到 allow_url_fopen 设置为 On。因为您已经将其设置为开。你可以试试这个代码:


<?php


function get_content($URL){

      $ch = curl_init();

      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

      curl_setopt($ch, CURLOPT_URL, $URL);

      $data = curl_exec($ch);

      curl_close($ch);

      return $data;

}


echo get_content('https://bitpay.com/');


?>

但是页面不会正确加载,因为在目标站点上使用了资源(图像、脚本等)的绝对路径。所以需要完整 URL 的路径。


查看完整回答
反对 回复 2021-11-13
  • 3 回答
  • 0 关注
  • 167 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信