Laravel 4 Laravel 4的GeoIP仅显示示例数据
我已经用Laravel 4安装了GeoIP。我已经下载了MaxMind mmdb数据文件,并按照说明将其放置在app/database/MaxMind中 下面是我的基本代码,但它总是显示示例数据,而不是实际值Laravel 4 Laravel 4的GeoIP仅显示示例数据,laravel-4,geoip,Laravel 4,Geoip,我已经用Laravel 4安装了GeoIP。我已经下载了MaxMind mmdb数据文件,并按照说明将其放置在app/database/MaxMind中 下面是我的基本代码,但它总是显示示例数据,而不是实际值 $loc = GeoIP::getLocation(); print_r($loc); 每次我拿回来这个: Array ( [ip] => ::1 [isoCode] => US [country] => United States [city] => New H
$loc = GeoIP::getLocation();
print_r($loc);
每次我拿回来这个:
Array ( [ip] => ::1 [isoCode] => US [country] => United States [city] => New Haven [state] => CT [postal_code] => 06510 [lat] => 41.31 [lon] => -72.92 [timezone] => America/New_York [continent] => NA [default] => 1 )
我没有对配置文件做任何更改,它仍然是这样的:
return array(
// Service (only maxmind so far)
'service' => 'maxmind',
'maxmind' => array(
'type' => 'database', // database or web_service
'user_id' => '',
'license_key' => ''
)
);
getLocation方法要求您传递一个IP地址,它将返回该IP的位置详细信息。例如,使用此属于Google的IP地址:
GeoIP::getLocation('64.233.191.128');
您将获得以下数据:
array(
"ip" => "64.233.191.128"
"isoCode" => "US"
"country" => "United States"
"city" => "Mountain View"
"state" => "CA"
"postal_code" => 94043
"lat" => 37.4192
"lon" => -122.0574
"default" => false
)
笔记
在本地服务器上进行测试时,在没有IP的情况下调用GeoIP::getLocation将不起作用,因为本地IP不是公共的。Bogdan为我解决了这个问题-在将模板移动到模型中并通过控制器传递之前,我正在模板中进行快速测试。一旦我搬了它,事情开始起作用了 仅使用 GeoIP::getLocation; 在我的本地服务器上不起作用,所以我现在要做的是测试:
$ip = '173.234.149.140'; //la
$loc = \GeoIP::getLocation($ip);
一旦在实时服务器上,我应该能够从客户端获得实际的IP。最终,我将拉长和拉长,从我自己的存储位置数据库中查找最近的存储位置,然后使用Haversine mySQL公式查找最近的存储位置,如下所示:
$lat = $loc['lat'];
$lng = $loc['lon'];
$results = \DB::select( \DB::raw("SELECT id, ( 3959 * acos( cos( radians($lat) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians($lng) ) + sin( radians($lat) ) * sin( radians( lat ) ) ) ) AS distance FROM locations HAVING distance < 500 ORDER BY distance LIMIT 0 , 20;"));
根据文档,听起来只使用GeoIP::GetLocation将“获取网站访问者的位置数据”——因此我认为您不必向其传递IP。当我尝试使用GeoIP::getLocation'64.233.191.128'-和一个IP地址,即使是那个地址,也没有响应,也没有错误。奇怪的是,它甚至没有在同一个php脚本分隔符内完成任何其他代码。您是否在本地计算机上测试过这一点?我正在使用XAMPwell在本地计算机上测试,这是您的问题,localhost或127.0.0.1无法返回任何有效数据,因为它不是公共IP地址,这就是GeoIP在没有IP地址的情况下试图获取数据的IP。但是如果我提供IP地址,它应该可以工作,不是吗?如果使用GeoIP::getLocation'64.233.191.128';例如即使在本地运行?它在本地主机上运行吗??或者需要一台实时服务器来运行此代码?没有理由不这样做。