PHP使用Chianz接口查询IP归属地
在PHP开发中,有时需要获取访客IP的地理位置。相比常见的ip138等接口,Chianz.com提供的数据在某些场景下更为详尽。本例演示如何通过PHP cURL或file_get_contents抓取网页内容,并利用正则表达式提取IP归属地信息。
原理说明
Chianz.com提供了一个公开的IP查询工具页面。当用户访问该页面并传入IP参数时,服务端会返回包含地区信息的HTML片段。我们的目标是请求该页面,定位到显示地区的标签,然后清洗掉无关的HTML标记和装饰符号,最终输出纯净的地区字符串。
操作步骤
第1步:构造请求URL
首先确定目标IP地址,并将它拼接到Chianz的查询接口链接后。接口地址格式为 http://tool.chinaz.com/IP/?IP= 加上具体的IP数值。
第2步:获取网页源码
使用PHP内置函数 file_get_contents() 向上述URL发起HTTP GET请求。该函数将返回完整的HTML响应内容到一个变量中,供后续处理使用。
第3步:正则匹配提取区域
观察返回的HTML结构,地区信息通常包裹在 <strong> 标签及其前后的 <br /> 中。我们可以编写一个正则表达式来捕获这一模式:
- 模式:
/==>>.+</strong><br />/ - 目的:匹配包含 "==>>" 开头以及结束于
的整个片段,确保捕获到完整的地区描述行。
第4步:清理结果数据
初次匹配得到的数组中可能包含前缀标记如 ==>> 或其他干扰字符。我们需要再次使用正则替换,去除 (==>>).+(==>>s) 类型的非核心内容,只保留有意义的文字。
第5步:输出与调试
将最终清洗后的数组打印出来以便检查。建议先使用 <pre> 标签格式化输出,直观查看数据结构是否正常。
完整代码示例
<?php
// 1. 定义要查询的IP地址
$ipAddr = "4.4.44.4";
// 2. 构造Chianz查询接口URL
$ipChinazAddr = "http://tool.chinaz.com/IP/?IP=" . $ipAddr;
// 3. 获取远程页面内容
// 注意:某些服务器环境可能需要开启 allow_url_fopen,或使用cURL替代
$contents = file_get_contents($ipChinazAddr);
if ($contents === false) {
die("请求失败,请检查网络连接或fopen权限");
}
// 4. 第一次正则匹配:提取包含地区信息的片段
$pattern1 = "/==>>.+<\/strong><br \/>/";
preg_match_all($pattern1, $contents, $addrArray);
$num = count($addrArray[0]);
// 5. 第二次正则替换:清洗多余符号
$pattern2 = "/(==>>).+(==>>s)/";
for ($i = 0; $i < $num; $i++) {
// 移除前缀和后缀的干扰字符
$addrArray[0][$i] = preg_replace($pattern2, "", $addrArray[0][$i]);
}
// 6. 输出结果
echo "<pre>";
print_r($addrArray);
echo "</pre>";
?>
注意事项与排错
- 依赖设置: 代码使用了
file_get_contents读取远程URL,需确保 php.ini 中的allow_url_fopen为 On。若服务器禁用此选项,请改用 cURL 扩展实现相同功能。 - 正则时效性: HTML页面的结构可能会随网站更新而改变。如果代码运行结果为空,请先检查
$contents的实际返回值,并根据新的HTML结构调整$pattern中的正则表达式。 - 编码问题: 确保 PHP 文件和浏览器显示的编码一致(通常为 UTF-8),避免中文地区名出现乱码。
以上就是PHP通过Chianz.com接口解析IP地址与地区信息的详细内容,更多关于PHP IP查询的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













