我想使用外部服务(网站服务)获取一些地理定位信息,但这只适用于我的电脑(localhost使用WampServer
http客户端);当我的php文件被转移到远程主机(pc)时,它无法获取这些信息。已经尝试了几种主机服务,但仍然没有成功。
PS:我对网站的引用是http://ip-api.com/。
这是我的代码:
$ip = $_REQUEST['REMOTE_ADDR'];
$query = @unserialize(file_get_contents('http://ip-api.com/php/'.$ip));
if($query && $query['status'] == 'success') {
$regiao = $query['regionName'];
$cidade = $query['city'];
$isp = $query['isp'];
$sigla_regiao = $query['region'];
}
else {
echo '';
}
那么,有人有一些想法为什么这个api在远程主机上不起作用?
提前致谢。
答案 0 :(得分:0)
根据您发布的错误,file_get_contents
功能无法创建与远程主机的连接。可能是某些功能禁用了对远程资源的访问。
您可以尝试使用cURL访问远程URL:
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "http://ip-api.com/php" . $ipAddr);
curl_setopt ($curl, CURLOPT_RETURNTRANSFER, 1);
$content = curl_exec ($curl);
curl_close ($curl);
if (curl_errno($curl))
throw new \Exception(sprintf("Connection error %s: %s", curl_errno($curl), curl_error($curl)));
print_r(unserialize($content));
答案 1 :(得分:0)
如果您对其他提供商感兴趣,可以使用https://geoip-db.com
的服务一个有效的JSON示例:
<?php
$json = file_get_contents('https://geoip-db.com/json');
$data = json_decode($json);
print $data->country_code . '<br>';
print $data->country_name . '<br>';
print $data->state . '<br>';
print $data->city . '<br>';
print $data->postal . '<br>';
print $data->latitude . '<br>';
print $data->longitude . '<br>';
print $data->IPv4 . '<br>';
?>
或者使用php进行JSONP回调:
<?php
$jsonp = file_get_contents('https://geoip-db.com/jsonp');
$data = jsonp_decode($jsonp);
print $data->country_code . '<br>';
print $data->country_name . '<br>';
print $data->state . '<br>';
print $data->city . '<br>';
print $data->postal . '<br>';
print $data->latitude . '<br>';
print $data->longitude . '<br>';
print $data->IPv4 . '<br>';
// Strip callback function name and parenthesis
function jsonp_decode($jsonp) {
if($jsonp[0] !== '[' && $jsonp[0] !== '{') {
$jsonp = substr($jsonp, strpos($jsonp, '('));
}
return json_decode(trim($jsonp,'();'));
}
?>