在我的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
抛出我提到的错误。
我搜索了很多并尝试了以下内容:
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')
时,它不再起作用。
人们似乎在没有阅读它的情况下回答我的问题。给我答案,我已经尝试过并提到过。请阅读。
答案 0 :(得分:0)
从php.ini文件中启用allow_url_fopen