在PHP开发过程中,获取用户所在省市是一个常见的需求,本文将详细介绍如何在PHP中获取省市信息,主要包括利用IP地址获取、通过用户输入获取以及使用第三方API获取三种方法。
利用IP地址获取省市信息
1、使用php内置函数获取IP地址
在PHP中,我们可以通过$_SERVER全局变量获取到访问者的IP地址,以下是获取IP地址的示例代码:
function get_ip() { if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) { $ip = getenv("HTTP_CLIENT_IP"); } elseif (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) { $ip = getenv("HTTP_X_FORWARDED_FOR"); } elseif (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) { $ip = getenv("REMOTE_ADDR"); } elseif (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) { $ip = $_SERVER['REMOTE_ADDR']; } else { $ip = "unknown"; } return ($ip); } $ip = get_ip(); echo '您的IP地址是:' . $ip;
2、使用IP地址库获取省市信息
获取到IP地址后,我们可以通过IP地址库来查询该IP地址所在的省市,这里以QQ IP地址库为例,介绍如何使用。
访问QQ IP地址库官网(此处不提供链接),申请一个免费API密钥,使用以下代码查询省市信息:
function get_ip_address($ip) { $key = '您的API密钥'; // 替换为您的API密钥 $url = "http://ip.qq.com/cgi-bin/searchip?searchip1=" . $ip; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $data = curl_exec($ch); curl_close($ch); $preg = "/<span>([x{4e00}-x{9fa5}]+[x{4e00}-x{9fa5}]+)</u"; preg_match_all($preg, $data, $array); return $array[1][0] . $array[1][1]; } $ip = get_ip(); $address = get_ip_address($ip); echo '您的IP地址所在省市为:' . $address;
通过用户输入获取省市信息
在某些场景下,我们可能需要用户手动输入所在省市,这时,可以创建一个省市下拉列表,让用户选择。
1、创建省市下拉列表
我们需要一个包含省市信息的数组,这里以中国省市为例:
$provinces = array( '北京', '天津', '河北', '山西', '内蒙古', '辽宁', '吉林', '黑龙江', '上海', '江苏', '浙江', '安徽', '福建', '江西', '山东', '河南', '湖北', '湖南', '广东', '广西', '海南', '重庆', '四川', '贵州', '云南', '西藏', '陕西', '甘肃', '青海', '宁夏', '新疆' ); $cities = array( '北京' => array('东城区', '西城区', '朝阳区', '丰台区', '石景山区', '海淀区', '门头沟区', '房山区', '通州区', '顺义区', '昌平区', '大兴区', '怀柔区', '平谷区', '密云区', '延庆区'), // 其他省市市区信息省略 );
创建省市下拉列表:
<select name="province" id="province"> <option value="">请选择省份</option> <?php foreach ($provinces as $province): ?> <option value="<?php echo $province; ?>"><?php echo $province; ?></option> <?php endforeach; ?> </select> <select name="city" id="city"> <option value="">请选择城市</option> </select>
2、使用JavaScript为省市下拉列表添加事件
<script> $(document).ready(function() { $("#province").change(function() { var province = $(this).val(); $("#city").empty(); $("#city").append('<option value="">请选择城市</option>'); <?php foreach ($cities as $province => $city_list): ?> if (province == '<?php echo $province; ?>') { <?php foreach ($city_list as $city): ?> $("#city").append('<option value="<?php echo $city; ?>"><?php echo $city; ?></option>'); <?php endforeach; ?> } <?php endforeach; ?> }); }); </script>
使用第三方API获取省市信息
除了以上两种方法,我们还可以使用第三方API来获取省市信息,以下以高德地图API为例进行介绍。
1、申请高德地图API密钥
访问高德地图开放平台官网(不提供链接),申请一个Web服务API密钥。
2、使用高德地图API获取省市信息
function get_address_by_amap($ip) { $key = '您的API密钥'; // 替换为您的API密钥 $url = "https://restapi.amap.com/v3/ip?ip=" . $ip . "&key=" . $key; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $data = curl_exec($ch); curl_close($ch); $result = json_decode($data, true); if ($result['status'] == '1') { return $result['province'] . $result['city']; } else { return '获取地址失败'; } } $ip = get_ip(); $address = get_address_by_amap($ip); echo '您的IP地址所在省市为:' . $address;
就是在PHP中获取省市信息的几种方法,根据实际需求,可以选择合适的方法来实现,希望本文能对您有所帮助!