在PHP开发过程中,获取用户所在省市是一个常见的需求,本文将详细介绍如何在PHP中获取省市信息,主要包括利用IP地址获取、通过用户输入获取以及使用第三方API获取三种方法。
利用IP地址获取省市信息
1、使用php内置函数获取IP地址
在PHP中,我们可以通过$_SERVER全局变量获取到访问者的IP地址,以下是获取IP地址的示例代码:
PHP
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密钥,使用以下代码查询省市信息:
PHP
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、创建省市下拉列表
我们需要一个包含省市信息的数组,这里以中国省市为例:
PHP
$provinces = array(
'北京', '天津', '河北', '山西', '内蒙古', '辽宁', '吉林', '黑龙江', '上海', '江苏', '浙江', '安徽', '福建', '江西', '山东', '河南', '湖北', '湖南', '广东', '广西', '海南', '重庆', '四川', '贵州', '云南', '西藏', '陕西', '甘肃', '青海', '宁夏', '新疆'
);
$cities = array(
'北京' => array('东城区', '西城区', '朝阳区', '丰台区', '石景山区', '海淀区', '门头沟区', '房山区', '通州区', '顺义区', '昌平区', '大兴区', '怀柔区', '平谷区', '密云区', '延庆区'),
// 其他省市市区信息省略
);
创建省市下拉列表:
PHP
<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为省市下拉列表添加事件
PHP
<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获取省市信息
PHP
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中获取省市信息的几种方法,根据实际需求,可以选择合适的方法来实现,希望本文能对您有所帮助!