php - 使用 php cURL 和 json 通过 ip 使用在线服务获取用户位置
问题描述
今天我有一些 php cURL 代码必须向用户显示他的位置,例如:ip、国家、城市它有.. 如果用户是机器人 - 什么也不做。所以,我这样做,但它不能正常工作。只显示ip,没有其他内容..请帮助..让力量与你同在..感谢大家的帮助。
<?php
$ip = $_SERVER['REMOTE_ADDR'];
$apiurl = "https://api.2ip.ua/geo.json?ip=$ip";
//--
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "$apiurl");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$contents = curl_exec ($ch);
//--
curl_close ($ch);
//- **************-//
$pieces = explode('"', $contents);
$country = $pieces['7'];
$city = $pieces['11'];
$city2 = $pieces['13'];
echo "Your IP is :" . $ip . " and country " .$country. " and city " .$city;
?>
解决方案
不要使用explode!,api的答案是JSON,而是你必须这样做:
$data = json_decode($contents, true);
$country = $data['country'];
$city = $data['city'];
对于您需要的任何其他领域,依此类推。
顺便说一句,您还可以使用支持 ipv4 和 ipv6 支持的多重检测的代码改进 IP 检测
if (isset($_SERVER['REMOTE_HOST'])) {
$ip = $_SERVER['REMOTE_HOST'];
} elseif (isset($_SERVER['HOST'])) {
$ip = $_SERVER['HOST'];
} elseif (isset($_SERVER['REMOTE_ADDR'])) {
$ip = $_SERVER['REMOTE_ADDR'];
} else {
$host = '';
}
$ip = str_replace("::ffff:","",$ip);//::ffff:127.127.127.127 en caso de jugo ipv6
问候并投票
推荐阅读
- r - dplyr中基于多列条件的R函数
- javascript - Google Apps 脚本中的响应和错误处理。邮政?与FailureHandler()?
- python - 如何在 Flask-Dance 框架中识别 Google OAuth 是被授权还是被拒绝
- javascript - 如何在弹出窗口打开后立即将选项卡焦点放在弹出窗口上,而不是将焦点集中在先前选择的值上
- visual-studio-2017 - atls.lib 不在文件系统中
- java - 获取json中json数组的String值
- android - 如何在 Android 中使用 LiveData 和 ViewModel 发出 2 系列请求?
- class - 函数未在范围内声明
- visual-studio-code - 当在 vscode 顶部显示另一个窗口时屏幕被破坏
- kotlin - 如何在 Kotlin/Native 中使用 UnsafeMutableRawPointer?