PHP小接口-利用站长网获取IP的地理位置(curl方式)
本帖最后由 yuren0 于 2022-1-14 13:57 编辑代码很短,使用方便
已备注大部分代码含义
使用方法:将页面放入服务器,直接访问
直接访问将返回自身IP和地理位置
也可以如:https://52pojie.cn/?ip=8.8.8.8
<?php
echo '<html>
<head>
<title>IP地理位置接口</title></head></html>';
//以上内容输出页面标题
if (!empty($_GET["ip"])){//如果接口访问时带了IP参数,则查询参数中的地址
$local=$_GET["ip"];
} else {
$local=$_SERVER["REMOTE_ADDR"];//否则查询自身本地IP地址
}
//下方代码为curl核心代码
$url="https://ip.chinaz.com/".$local;//访问地址
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 1);//使用自身协议头
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$response = curl_exec($ch);//返回IP138的页面源码
$response = preg_replace('/\s+/', '', $response);//删除源码中所有的空格
curl_close($ch);
//curl核心代码结束,下面代码为取出中间文本
function get_em($input, $start, $end) {
$substr = substr($input, strlen($start)+strpos($input, $start),
(strlen($input) - strpos($input, $end))*(-1));
return $substr;
}
$string = $response;
$start = '0lh45"><em>';
$end = '</em><aclass';
echo 'IP:'.$local.'<br>位置:'.get_em($string, $start, $end);//输出查询IP和取出地理位置
?> yhk2008 发表于 2022-1-14 15:38
哇,不错啊,但是我觉得加一个json格式更好
echo 'IP:'.$local.'<br>位置:'.get_em($string, $start, $end);//输出查询IP和取出地理位置
修改为:
$ip = ['code' => 200, 'ip' => $local, 'weizhi' => get_em($string, $start, $end)];
//json格式化、中文不转为unicode、不再转义
die(json_encode($ip,JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES));
p_uppet 发表于 2022-1-17 11:59
@yuren0 才发现你是某易论坛的大神,你的源码不错,挺好用
大神是真不敢当{:1_909:} 哇,不错啊,但是我觉得加一个json格式更好{:1_918:} 可以,挺不错 想根据IP获取城市应该怎么做呢? @yuren0 才发现你是某易论坛的大神,你的源码不错,挺好用:lol lanzi 发表于 2022-1-17 09:50
想根据IP获取城市应该怎么做呢?
是查询任意IP,只需要城市信息么 不错呀,用上了。 这是干什么用的?获取IP吗?
页:
[1]
2