小辉网络社区致力于优质软件,活动线报,游戏辅助,绿色工具等资源共享,好货不私藏!

使用PHP代码获取CDN当前节点IP并输出展示

小辉工作室 网络技术教程

PHP获取CDN当前节点IP获取用户真实IP的方法
PHP超全局变量$_SERVER
PHP超全局变量$_SERVER,是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组,这个数组中也包含了用户的请求的真实IP址址,所以我们可以利用它在使用各种cdn加速网站上进行测试。在php中,一般都是通过以下代码来获取真实IP地址,但在CDN下,此代码获取到的IP只是CDN最近一个节点的IP,并不是真实的用户IP
<?php
$_SERVER['REMOTE_ADDR'];
?>
编写一个如下代码的PHP文件,并命名为ceshi.php并放到使用CDN加速的网站根目录下面,并在浏览器中以网址的方式打开。
代码如下:
<?php
print_r($_SERVER);
?>
以下是使用各个CDN加速后,打印出的结果,我们只列出含有真实IP地址的部份与 'REMOTE_ADDR' 部份
百度CDN打印结果:
Array
(   
    [HTTP_X_FORWARDED_FOR] => 119.164.27.53,123.234.0.103,27.221.124.94
    [HTTP_X_REAL_IP] => 119.164.27.53
    [REMOTE_ADDR] => 150.138.138.169
    .........
)
百度CDN下打印出来的数组,只有 [HTTP_X_FORWARDED_FOR] 与 [HTTP_X_REAL_IP]  包含了真实的IP地址.
阿里CDN打印结果:
Array
(
    [HTTP_ALI_CDN_REAL_IP] => 119.164.27.53
    [HTTP_X_FORWARDED_FOR] => 119.164.27.53
    [REMOTE_ADDR] => 115.124.31.68
    .........
)
在阿里CDN中,只有 [HTTP_ALI_CDN_REAL_IP] 与 [HTTP_X_FORWARDED_FOR]  包含了真实的IP地址。
七牛CDN打印结果:
Array
(
    [HTTP_ALI_CDN_REAL_IP] => 119.164.27.53
    [HTTP_X_FORWARDED_FOR] => 119.164.27.53
    [REMOTE_ADDR] => 182.92.246.161
    .........
)
在七牛CDN下,打印的结果 [HTTP_ALI_CDN_REAL_IP]  和 [HTTP_X_FORWARDED_FOR]  中含有真实的IP地址
又拍云CDN打印结果:
Array
(
    [HTTP_X_FORWARDED_FOR] => 119.164.27.53
    [HTTP_X_REAL_IP] => 119.164.27.53
    [REMOTE_ADDR] => 150.138.216.79
    .........
)
在又拍云CDN下,打印结果,[HTTP_X_FORWARDED_FOR]  与  [HTTP_X_REAL_IP]  含有真实的IP地址。
未使用CDN关于IP字段
Array
(
    [REMOTE_ADDR] => 119.164.27.53
)
在未使用CDN的情况下,只有 “[REMOTE_ADDR]”包含了真实的IP地址,以上几家列出的 [HTTP_X_FORWARDED_FOR]  与  [HTTP_X_REAL_IP] 并未出现。
几家CDN打印结果分析:
通过对比使用以上几家CDN网站中,php文件打印结果,我们可以总结出以下三点:
1、在使用CDN时,$_SERVER变量中就会含有“HTTP_X_FORWARDED_FOR”元素,并且它里面含有用户的真实IP地址
2、未使用CDN时,$_SERVER变量中不会出现“HTTP_X_FORWARDED_FOR”元素
3、百度CDN下,“HTTP_X_FORWARDED_FOR”元素中是多个IP地址,并用英文逗号分开,第一个为用户的真实IP地址。
PHP获取网站使用CDN加速下用户真实的IP地址代码
我们可以通过判断$_SERVER数组变量中是否含有“HTTP_X_FORWARDED_FOR”元素来判断,网站是否使用CDN加速,如果使用了CDN加速并反回用户的真实IP,如果没实用就返回 “REMOTE_ADDR" 元素的值
代码如下:
<?php
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
    //为了兼容百度的CDN,所以转成数组
    $arr = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);
    echo $arr[0];
}else{
    echo $_SERVER['REMOTE_ADDR'];
}
?>
函数代码:
如果你想在PHP的文件中多次调用以上代码,我们把可以把它封装成一个函数,如下
<?php
function GetUserIP(){
    if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
        //为了兼容百度的CDN,所以转成数组
        $arr = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);
        return $arr[0];
    }else{
        return $_SERVER['REMOTE_ADDR'];
    }
}
?>
函数调用方法:
echo GetUserIP();

温馨提示:如有转载或引用以上内容请将本文链接作为出处标注!百度已收录

免责声明:本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。侵删请致信E-mail:431228450@qq.com

标签 暂无标签
资源分享
评论列表