地理位置仅适用于本地主机
Posted
技术标签:
【中文标题】地理位置仅适用于本地主机【英文标题】:Geo location only working on localhost 【发布时间】:2015-07-06 18:06:31 【问题描述】:我已经在本地主机上成功地在我的网站中实现了地理位置。但是,将网站上传到在线服务器后,它就不再起作用了。我得到一个 bool(false) 错误。
Geo.php
<?php
class Geo
protected $api = 'http://www.telize.com/geoip/%s';
protected $properties = [];
public function __get($key)
if (isset($this->properties[$key]))
return $this->properties[$key];
return null;
public function request($ip)
$url = sprintf($this->api, $ip);
$data = $this->sendRequest($url);
$this->properties = json_decode($data, true);
protected function sendRequest($url)
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_URL, $url);
return curl_exec($curl);
?>
index.php
<?php
include ("functions/functions.php");
$ip = getIp();
require 'Geo.php';
$geo = new Geo;
$geo->request('$ip');
$location = $geo->city . ', ' .$geo->region;
?>
getIp() 函数位于我包含的 function.php 文件中,它工作正常,因此我将其排除在外。
【问题讨论】:
你在哪一行得到错误? @jcuenod,它只是回显:bool(false),没有说什么行。 请注意,$geo->request('$ip');
将传递字符串 $ip 而不是该变量的值。请改用$geo->request($ip);
@Stefan,还是不行
有更好的方法吗?
【参考方案1】:
代码改进。
地理.php
<?php
class Geo
protected $api = 'http://www.telize.com/geoip/%s';
protected $properties = [];
public function __get($key)
if (isset($this->properties[$key]))
return $this->properties[$key];
return null;
public function request($ip)
$url = sprintf($this->api, $ip);
$data = $this->sendRequest($url);
if($data !== false) $this->properties = json_decode($data, true);
return ($data !== false);
protected function sendRequest($url)
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_URL, $url);
return curl_exec($curl);
?>
index.php
<?php
include ("functions/functions.php");
$ip = getIp();
require 'Geo.php';
$geo = new Geo;
if($geo->request($ip))
$location = $geo->city . ', ' .$geo->region;
else
// Location not found
?>
【讨论】:
感谢您的改进。我找不到位置,所以我猜它无法请求 IP 地址,并且我确定 IP 地址在那里,因为我已经回显了变量 $ip 并且它是正确的。 还是什么都没有。可以建议我可以用来获取用户位置的另一种方法吗? @chris94 因为您的 getIp 函数在本地服务器/网络之外无法工作。以上是关于地理位置仅适用于本地主机的主要内容,如果未能解决你的问题,请参考以下文章
在 Android 上使用 PhoneGap 进行地理定位仅适用于 index.html
Java Spring MVC WebSocket 应用程序仅适用于本地应用程序服务器,但不适用于 openshift 主机