PHP使用Chianz接口查询IP归属地

洛溪
洛溪
发布时间:2026-10-14 | 5人浏览过
原创

在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查询的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表