当前位置:首页 > python代码 > 正文内容

PHP脚本获取客户端IP地址和解析设备信息

HelloKitty1年前 (2024-12-16)python代码735

在互联网应用中,了解访问者的信息对于网站分析、用户行为跟踪以及安全控制等方面非常重要。PHP是一种广泛使用的服务器端脚本语言,它提供了多种方法来收集和处理来自客户端的数据。下面的代码片段展示了两个PHP函数,它们分别用于获取客户端的IP地址和解析用户的设备信息(包括操作系统和浏览器)。

获取客户端IP地址

function get_client_ip() {
    $ipaddress = '';
    if (getenv('HTTP_CLIENT_IP')) {
        $ipaddress = getenv('HTTP_CLIENT_IP');
    } elseif (getenv('HTTP_X_FORWARDED_FOR')) {
        $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
    } elseif (getenv('HTTP_X_FORWARDED')) {
        $ipaddress = getenv('HTTP_X_FORWARDED');
    } elseif (getenv('HTTP_FORWARDED_FOR')) {
        $ipaddress = getenv('HTTP_FORWARDED_FOR');
    } elseif (getenv('HTTP_FORWARDED')) {
        $ipaddress = getenv('HTTP_FORWARDED');
    } elseif (getenv('REMOTE_ADDR')) {
        $ipaddress = getenv('REMOTE_ADDR');
    } else {
        $ipaddress = 'UNKNOWN';
    }
    return $ipaddress;
}

这个get_client_ip()函数尝试从多个环境变量中查找客户端的IP地址。这些变量通常由Web服务器或代理服务器设置,以反映请求的实际来源。函数按照一定的优先级顺序检查各个可能包含客户端IP地址的环境变量,并返回找到的第一个非空值。如果所有这些变量都为空,则返回字符串'UNKNOWN'表示无法确定客户端的IP地址。

  • HTTP_CLIENT_IP: 一般由负载均衡器或代理服务器设置,直接反映了原始客户端的IP。

  • HTTP_X_FORWARDED_FOR: 是一个标准的HTTP头字段,用来识别通过HTTP代理或负载平衡器连接到Web服务器的客户端的原始IP地址。

  • HTTP_X_FORWARDEDHTTP_FORWARDED_FORHTTP_FORWARDED: 这些都是变体形式,某些代理可能会使用不同的命名约定。

  • REMOTE_ADDR: 是最直接的方式,当没有代理时,它代表了直接与服务器通信的客户端的IP地址。

解析设备信息

function parse_device_info($userAgent) {
    $platform = '(unknown)';
    $browser = '(unknown)';

    // 获取操作系统
    // [此处省略了大量正则表达式匹配代码]

    // 获取浏览器
    // [此处省略了大量正则表达式匹配代码]

    return "平台: {$platform}, 浏览器: {$browser}";
}

parse_device_info($userAgent)函数接收一个参数 $userAgent,这是HTTP请求头中的User-Agent字符串,包含了关于发起请求的客户端软件的信息。通过一系列的正则表达式匹配,该函数尝试识别出客户端的操作系统和浏览器类型,并将结果格式化为“平台: [操作系统], 浏览器: [浏览器]”的形式返回。

  • 操作系统的检测是基于一系列针对特定操作系统特征字符串的正则表达式进行的。例如,/windows nt 10/i 匹配Windows 10操作系统。

  • 类似地,浏览器的检测也是通过正则表达式完成的,如 /msie/i 用于识别Internet Explorer浏览器。

需要注意的是,虽然这段代码可以有效地解析大部分常见的User-Agent字符串,但它并不能保证100%的准确性。因为User-Agent字符串是可以被客户端自定义的,而且新的浏览器版本或操作系统可能会引入不在此代码覆盖范围内的新字符串模式。因此,在实际应用中,建议定期更新这些正则表达式,或者考虑使用更专业的库,比如Mobile_Detect或其他第三方服务,来提高解析的准确性和可靠性。

效果图如下

代码图片1

代码图片2

完整代码如下

// 获取客户端IP地址
function get_client_ip() {
    $ipaddress = '';
    if (getenv('HTTP_CLIENT_IP')) {
        $ipaddress = getenv('HTTP_CLIENT_IP');
    } elseif (getenv('HTTP_X_FORWARDED_FOR')) {
        $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
    } elseif (getenv('HTTP_X_FORWARDED')) {
        $ipaddress = getenv('HTTP_X_FORWARDED');
    } elseif (getenv('HTTP_FORWARDED_FOR')) {
        $ipaddress = getenv('HTTP_FORWARDED_FOR');
    } elseif (getenv('HTTP_FORWARDED')) {
        $ipaddress = getenv('HTTP_FORWARDED');
    } elseif (getenv('REMOTE_ADDR')) {
        $ipaddress = getenv('REMOTE_ADDR');
    } else {
        $ipaddress = 'UNKNOWN';
    }
    return $ipaddress;
}

// 解析设备信息的函数
function parse_device_info($userAgent) {
    $platform = '(unknown)';
    $browser = '(unknown)';

    // 获取操作系统
    if (preg_match('/linux/i', $userAgent)) {
        $platform = 'Linux';
    } elseif (preg_match('/macintosh|mac os x/i', $userAgent)) {
        $platform = 'Mac';
    } elseif (preg_match('/windows nt 10/i', $userAgent)) {
        $platform = 'Windows 10';
    } elseif (preg_match('/windows nt 6.3/i', $userAgent)) {
        $platform = 'Windows 8.1';
    } elseif (preg_match('/windows nt 6.2/i', $userAgent)) {
        $platform = 'Windows 8';
    } elseif (preg_match('/windows nt 6.1/i', $userAgent)) {
        $platform = 'Windows 7';
    } elseif (preg_match('/windows nt 6.0/i', $userAgent)) {
        $platform = 'Windows Vista';
    } elseif (preg_match('/windows nt 5.2/i', $userAgent)) {
        $platform = 'Windows Server 2003/XP x64';
    } elseif (preg_match('/windows nt 5.1/i', $userAgent)) {
        $platform = 'Windows XP';
    } elseif (preg_match('/windows xp/i', $userAgent)) {
        $platform = 'Windows XP';
    } elseif (preg_match('/windows nt 5.0/i', $userAgent)) {
        $platform = 'Windows 2000';
    } elseif (preg_match('/windows me/i', $userAgent)) {
        $platform = 'Windows ME';
    } elseif (preg_match('/win98/i', $userAgent)) {
        $platform = 'Windows 98';
    } elseif (preg_match('/win95/i', $userAgent)) {
        $platform = 'Windows 95';
    } elseif (preg_match('/win16/i', $userAgent)) {
        $platform = 'Windows 3.11';
    }

    // 获取浏览器
    if (preg_match('/msie/i', $userAgent) && !preg_match('/opera/i', $userAgent)) {
        $browser = 'Internet Explorer';
    } elseif (preg_match('/firefox/i', $userAgent)) {
        $browser = 'Firefox';
    } elseif (preg_match('/safari/i', $userAgent)) {
        $browser = 'Safari';
    } elseif (preg_match('/chrome/i', $userAgent)) {
        $browser = 'Chrome';
    } elseif (preg_match('/edge/i', $userAgent)) {
        $browser = 'Edge';
    } elseif (preg_match('/opera/i', $userAgent)) {
        $browser = 'Opera';
    } elseif (preg_match('/netscape/i', $userAgent)) {
        $browser = 'Netscape';
    }

    return "平台: {$platform}, 浏览器: {$browser}";
}


扫描二维码推送至手机访问。

微信搜索关注王铁锹公众号或者搜索王秋风。

版权声明:本文由王铁锹个人发布,如需转载请注明出处。

本文链接:https://www.3ban.cn/?id=64

“PHP脚本获取客户端IP地址和解析设备信息” 的相关文章

python代码实现网页在线flv播放小工具

python代码实现网页在线flv播放小工具

项目介绍项目名称:python代码实现网页在线flv播放小工具简介:FlvPlayer 是一个简单的在线FLV格式视频播放器,它利用Python语言开发,旨在提供一种轻量级的方式让用户能够直接通过网络浏览器播放FLV格式的视频文件。此工具特别适合那些需要快速查看或分享FLV格式视频而不想下载专门的媒...

利用python导入flv文本链接随机构造一组网页播放

利用python导入flv文本链接随机构造一组网页播放

引言如下通过导入本地文件夹内的文本,引入链接调用python代码开放5000端口进行网页的flv随机播放,这个代码常用于随机测试flv的直播播放设置,亦或者监控等领域....软件规划如下FLV Video Player 是一个基于Web的简易视频播放器应用,使用Python的Flask框架构建。为用...

巧妙调用接口来判断ip地址

巧用一个使用 Python 发起 HTTPS 请求的例子,旨在获取指定 IP 地址的相关信息!请勿用于生产测试环境!import urllib.request import ssl # 定义请求的URL、方法、应用代码(API密钥)以及查询参数 host&nb...

Python脚本实现自动检测并重命名非正常图片文件

Python脚本实现自动检测并重命名非正常图片文件

概述在日常的文件管理和数据处理中,我们可能会遇到一些文件名虽然以特定扩展名结尾,但实际内容并不符合该格式的情况。例如,某些文件可能被错误地标记为 .jpg 文件,但实际上它们可能是其他类型的文件,如视频文件。这种情况下,如果我们依赖文件扩展名来处理文件,就可能导致程序出现错误或无法正确处理文件。本文...

vivo云服务照片视频批量下载代码~

vivo云服务照片视频批量下载代码~

起因,想要从vivo云服务中下载历史上传四五千张照片,结果点击全选之后,居然要我一张一张下载,需要我不停的点保存,这就很抽象了,难道我想要的批量下载不应该是打包成压缩包或者直接批量下载到文件夹中嘛?这点厂商做的甚至不如云盘,细节一点也没打磨!!!第一步打开vivo云服务官网,进入主页,打开控制台进行...

PDF文件批量删除空白页(带UI界面+成品)

一个是需要选中处理的PDF路径,一个是保存的位置制作背景:由于有大量excel文件需要打印,合并了EXCEL再生成PDF查看格式是否发生变化,看到合并的pdf后一堆空白页,根本删不完,而且也在网上找方法大部分都是教怎么预览删除,于是就制作了批量删除空白页的小软件,刚好同事也需要,但是她没python...