file_get_contents($ url):尝试直接访问URL时无法打开流错误

时间:2016-05-01 12:25:03

标签: file-get-contents

在我的laravel应用程序中,我安装了stevebauman/location": "1.3.*

它在我的本地服务器上工作得很好。我将它上传到远程服务器后,这一行

$contents = json_decode(file_get_contents($this->url.$ip), true);

文件中的

F:\xampp\htdocs\news5.2.23\vendor\stevebauman\location\src\Drivers\FreeGeoIp.php

抛出我提到的错误。

我搜索了很多并尝试了以下内容:

  • 我回复了$ url然后复制并直接放入浏览器,没关系。
  • allow_ini_set("allow_url_include", "on");ini_set("allow_url_fopen", "on");在index.php
  • 中写道
  • 使用curl。我将提供FreeGeoIp类,其中我使用curl进行测试

    <?php
        namespace Stevebauman\Location\Drivers;
    
        use Stevebauman\Location\Objects\Location;
        use Stevebauman\Location\Location as LocationInstance;
    
        class FreeGeoIp implements DriverInterface
        {
            /**
             * Holds the current Location class instance.
             *
             * @var LocationInstance
            */
            private $instance;
    
            /**
             * Holds the configuration instance.
             *
             * @var \Illuminate\Config\Repository
            */
            private $config;
    
            /*
             * Holds the drivers URL
             */
            private $url;
    
            /**
             * Constructor.
             *
             * @param LocationInstance $instance
            */
            public function __construct(LocationInstance $instance)
            {
                $this->instance = $instance;
    
                $this->config = $this->instance->getConfig();
    
                $this->url = $this->config->get('location.drivers.FreeGeoIp.url');
            }
    
            /**
             * Retrieves the location from the driver FreeGeoIp and returns a    location object.
             *
             * @param string $ip
             *
             * @return Location
            */
             public function get($ip){
    
                 $location = new Location();
                 $file = $this->file_get_contents_curl(urlencode($this->url.$ip));
                 die();       
    
                return $location;
            }
    
            public function file_get_contents_curl($url) {
    
                $ch = curl_init($url);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
                curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
                curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
                curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
                var_dump($ch);
                $data = curl_exec($ch);
                if($errno = curl_errno($ch)) {
                    $error_message = curl_strerror($errno);
                    echo "cURL error ({$errno}):\n {$error_message}.</br>";
                }
                curl_close($ch);
                return $data;
            }
        } 
    

然后我发现了这个错误

  

cURL错误(6):无法解析主机名。

最后我到了某个地方,可能是我的网站所在的服务器有一个阻止外包网址的防火墙我不知道为什么会这样!

有趣的是,当我尝试return redirect('http://freegeoip.lwan.ws/json/visitor_ip') - 这一行在我的一个控制器的功能中时,它有效!

所以我必须放弃防火墙问题吗?

但是当我在同一个函数中使用file_get_contents('http://freegeoip.lwan.ws/json/visitor_ip')时,它不再起作用。

人们似乎在没有阅读它的情况下回答我的问题。给我答案,我已经尝试过并提到过。请阅读。

1 个答案:

答案 0 :(得分:0)

从php.ini文件中启用allow_url_fopen