PHP获取客户端IP地址方式[通俗易懂]

PHP获取客户端IP地址方式[通俗易懂]一、如果没有使用代理服务器REMOTE_ADDR=客户端IPHTTP_X_FORWARDED_FOR=没数值或不显示$ip=$_SERVER[‘REMOTE_ADDR’];二、使用透明代理REMOTE_ADDR=最后一个代理服务器IPHTTP_X_FORWARDED_FOR=客户端真实IP(经过多个代理服务器时,这个值类似:221.5.252….

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

一、如果没有使用代理服务器

REMOTE_ADDR = 客户端IP    HTTP_X_FORWARDED_FOR = 没数值或不显示
$ip = $_SERVER['REMOTE_ADDR'];

Jetbrains全家桶1年46,售后保障稳定

二、使用透明代理

REMOTE_ADDR = 最后一个代理服务器 IP
HTTP_X_FORWARDED_FOR = 客户端真实 IP (经过多个代理服务器时,这个值类似:221.5.252.160, 203.98.182.163, 203.129.72.215)

  这类代理还会将客户真实ip发送到请求对象,无法隐藏真实ip。

$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];

三、使用普通匿名代理服务器

REMOTE_ADDR = 最后一个代理服务器 IP
HTTP_X_FORWARDED_FOR = 代理服务器 IP (经过多个代理服务器时,这个值类似:203.98.182.163, 203.98.182.163, 203.129.72.215)

  这样就隐藏了客户端的真实ip,但服务器会知道客户端是通过代理服务器去访问的。

四、使用欺骗性代理服务器

REMOTE_ADDR = 代理服务器 IP
HTTP_X_FORWARDED_FOR = 随机的 IP(经过多个代理服务器时,这个值类似:220.4.251.159, 203.98.182.163, 203.129.72.215)

  服务器可以识别到时通过代理服务器访问的,但发送给目标服务器的是虚假ip。

五、使用高匿名代理

REMOTE_ADDR = 代理服务器 IP       HTTP_X_FORWARDED_FOR = 没数值或不显示

  使用这种代理时,不同浏览器不同设备会返回不同的ip头信息,因此PHP使用$_SERVER["REMOTE_ADDR"] 、$_SERVER["HTTP_X_FORWARDED_FOR"] 获取的值可能是空值也可能是“unknown”值。

PHP获取ip代码如下:

public function ip() {
    //strcasecmp 比较两个字符,不区分大小写。返回0,>0,<0。
    if (getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
        $ip = getenv('HTTP_CLIENT_IP');
    } else if (getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
        $ip = getenv('HTTP_X_FORWARDED_FOR');
    } else if (getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
        $ip = getenv('REMOTE_ADDR');
    } else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    $res =  preg_match ( '/[\d\.]{7,15}/', $ip, $matches ) ? $matches [0] : '';
    echo $res;
    //dump(phpinfo());//所有PHP配置信息
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/213497.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ORBSLAM2学习(一):ORB算法原理[通俗易懂]

    ORBSLAM2学习(一):ORB算法原理[通俗易懂]前言目前学习ORBSLAM2中,ORBSLAM2中使用ORB算子进行特征点的提取与描述,ORB算法原理主要来自于文章《ORBanefficientalternativetoSIFTorSURF》。这里先就该文章做自己的学习过程记录,之后结合文章内容分析ORBSLAM2中的代码实现(放到下一篇博客中)。本文把文章《ORBanefficientalternative……

    2022年10月25日
  • mpu6050计步原理_佳明速度传感器安装

    mpu6050计步原理_佳明速度传感器安装下面三部分内容包括:计步原理、基于MPU6050的计步实现、基于MPU6050的久坐检测实现,第一部分为转载内容,做东西最好要了解下关键部分的原理。一、计步原理以下转自:http://www.elecfans.com/yuanqijian/sensor/20170816539797.html1.先要摸清模型的特征目前,大部分设备都提供了可以检测各个方向的加速度传感器…

    2022年9月28日
  • Remove Duplicates from Sorted Array — LeetCode

    Remove Duplicates from Sorted Array — LeetCode原题链接: http://oj.leetcode.com/problems/remove-duplicates-from-sorted-array/ 这道题跟RemoveElement类似,也是考察数组的基本操作,属于面试中比较简单的题目。做法是维护两个指针,一个保留当前有效元素的长度,一个从前往后扫,然后跳过那些重复的元素。因为数组是有序的,所以重复元素一定相邻,不需要额外记录。时间复

    2022年10月31日
  • Java多线程详解_java支持多线程

    Java多线程详解_java支持多线程一、线程生命周期一个线程被实例化完成,到线程销毁的中间过程1.新生态:New一个线程对象被实例化完成,但是没有做任何操作2.就绪态度:Ready一个线程被开启,并且开始抢占CPU时间3.运

    2022年8月16日
  • unbuntu版 pycharm2021.9 激活码【2021免费激活】[通俗易懂]

    (unbuntu版 pycharm2021.9 激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~83PVI25FMO-eyJsaWNlb…

    2022年3月27日
  • Windows下目录和文件名长度的限制

    Windows下目录和文件名长度的限制&lt;noscripttype="text/javascript"&gt;&lt;/noscript&gt;&lt;noscripttype="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;&lt;/noscript&gt;今天,一个网友,问Windows

    2022年10月20日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号