猿问

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

我正在尝试运行一个托管在远程虚拟服务器上的小型网站。


当我通过 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输出/结果时,我得到一个空白页。甚至没有一个错误消息。


慕斯709654
浏览 168回答 3
3回答

qq_笑_17

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

Cats萌萌

我对我的 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 文件显然“不起作用”。

倚天杖

file_get_contents 不允许获取外部 url,直到 allow_url_fopen 设置为 On。因为您已经将其设置为开。你可以试试这个代码:<?phpfunction get_content($URL){&nbsp; &nbsp; &nbsp; $ch = curl_init();&nbsp; &nbsp; &nbsp; curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);&nbsp; &nbsp; &nbsp; curl_setopt($ch, CURLOPT_URL, $URL);&nbsp; &nbsp; &nbsp; $data = curl_exec($ch);&nbsp; &nbsp; &nbsp; curl_close($ch);&nbsp; &nbsp; &nbsp; return $data;}echo get_content('https://bitpay.com/');?>但是页面不会正确加载,因为在目标站点上使用了资源(图像、脚本等)的绝对路径。所以需要完整 URL 的路径。
随时随地看视频慕课网APP
我要回答