通过PHP实现获取访问用户IP


Posted in PHP onMay 09, 2020

在php中自带了一个非常的简单的获取IP地址的全局变量,很多初学都获取IP都使用它了,但是对于这些我们一般用法是满足了,但是对于要求高精度这个函数还是不行的。

这个是最简单的方法,对于开了透明代理之类的是没有办法的,如果内网访问也不能读取正确的外网IP,不过很省力就是了:

$ip = $_SERVER["REMOTE_ADDR"];

搞定~

上面方法用来取得客户端的 IP 地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的 IP 地址,而不是真正的客户端 IP 地址

要想透过代理服务器取得客户端的真实 IP 地址,就要使用 getenv("HTTP_X_FORWARDED_FOR") 来读取。
但是如果客户端没有通过代理服务器来访问,那么用getenv("HTTP_X_FORWARDED_FOR") 取到的值将是空的。

else if(getenv("HTTP_X_FORWARDED_FOR"))
$ip = getenv("HTTP_X_FORWARDED_FOR");

表示如果getenv("HTTP_X_FORWARDED_FOR") 取到的值存在不为空(即客户端使用代理服务器的情况下),则变量$ip等于getenv("HTTP_X_FORWARDED_FOR") 取到的真实IP值。

如果上面的else if(getenv("HTTP_X_FORWARDED_FOR"))取得的值为空(即没有使用代理服务器),则不会执行下面的$ip = getenv("HTTP_X_FORWARDED_FOR");这一行语句。

这种情况下已经确认客户端没有使用代理服务器,从而通过

else if(getenv("REMOTE_ADDR"))
$ip = getenv("REMOTE_ADDR");

这两行语句获得客户端的IP地址也是真实的IP地址,根据经验得出

function getIP()
{
  static $realip;
  if (isset($_SERVER)){
    if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){
      $realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
    } else if (isset($_SERVER["HTTP_CLIENT_IP"])) {
      $realip = $_SERVER["HTTP_CLIENT_IP"];
    } else {
      $realip = $_SERVER["REMOTE_ADDR"];
    }
  } else {
    if (getenv("HTTP_X_FORWARDED_FOR")){
      $realip = getenv("HTTP_X_FORWARDED_FOR");
    } else if (getenv("HTTP_CLIENT_IP")) {
      $realip = getenv("HTTP_CLIENT_IP");
    } else {
      $realip = getenv("REMOTE_ADDR");
    } 
  }
  return $realip;
}

另外如果我们想获取更精准的使用第三方是一个不错的方法哦

function get_onlineip() {
  $ch = curl_init('http://www.ip138.com/ip2city.asp');
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  $a = curl_exec($ch);
  preg_match('/[(.*)]/', $a, $ip);
  return $ip[1];
 }

这样不管理代理还是什么都可以判断IP地址哦

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
我的论坛源代码(三)
Oct 09 PHP
计算2000年01月01日起到指定日的天数
Oct 09 PHP
Ajax实时验证用户名/邮箱等是否已经存在的代码打包
Dec 01 PHP
使用HMAC-SHA1签名方法详解
Jun 26 PHP
destoon后台网站设置变成空白的解决方法
Jun 21 PHP
php接口数据加密、解密、验证签名
Mar 12 PHP
curl 出现错误的调试方法(必看)
Feb 13 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
Mar 02 PHP
PHP redis实现超迷你全文检索
Mar 04 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
Feb 21 PHP
PHP代码加密的方法总结
Mar 13 PHP
PHP常用字符串输出方法分析(echo,print,printf及sprintf)
Mar 09 PHP
如何通过PHP实现Des加密算法代码实例
May 09 #PHP
php变量与字符串的增删改查操作示例
May 07 #PHP
PHP数组与字符串互相转换实例
May 05 #PHP
禁止直接访问php文件代码分享
May 05 #PHP
php将字符串转换为数组实例讲解
May 05 #PHP
php输出形式实例整理
May 05 #PHP
PHP设计模式(九)外观模式Facade实例详解【结构型】
May 02 #PHP
You might like
yii框架中的Url生产问题小结
2012/01/16 PHP
浅谈使用PHP开发微信支付的流程
2015/10/04 PHP
Laravel学习教程之View模块详解
2017/09/18 PHP
PHP如何使用array_unshift()在数组开头插入元素
2020/09/01 PHP
javascript prototype,executing,context,closure
2008/12/24 Javascript
IE和FireFox(FF)中js和css的不同
2009/04/13 Javascript
JavaScript 撑出页面文字换行
2009/06/15 Javascript
Prototype Date对象 学习
2009/07/12 Javascript
jquery中的$(document).ready()与window.onload的区别
2009/11/18 Javascript
jquery cookie的用法总结
2013/11/18 Javascript
node.js中的http.response.end方法使用说明
2014/12/14 Javascript
js贪吃蛇网页版游戏特效代码分享(挑战十关)
2015/08/24 Javascript
jQuery图片旋转插件jQueryRotate.js用法实例(附demo下载)
2016/01/21 Javascript
js简单设置与使用cookie的方法
2016/01/22 Javascript
JavaScript黑洞数字之运算路线查找算法(递归算法)实例
2016/01/28 Javascript
AngularJS实践之使用NgModelController进行数据绑定
2016/10/08 Javascript
Javascript动画效果(4)
2016/10/11 Javascript
AngularJS 与百度地图的结合实例
2016/10/20 Javascript
浅谈webpack打包之后的文件过大的解决方法
2018/03/07 Javascript
js的继承方法小结(prototype、call、apply)(推荐)
2019/04/17 Javascript
js实现选项卡效果
2020/03/07 Javascript
JavaScript实现留言板案例
2020/03/17 Javascript
[16:04]DOTA2海涛带你玩炸弹 9月5日更新内容详解
2014/09/05 DOTA
python实现根据图标提取分类应用程序实例
2014/09/28 Python
python进阶_浅谈面向对象进阶
2017/08/17 Python
对Tensorflow中的矩阵运算函数详解
2018/07/27 Python
在Python 中实现图片加框和加字的方法
2019/01/26 Python
Django接收自定义http header过程详解
2019/08/23 Python
pytorch实现建立自己的数据集(以mnist为例)
2020/01/18 Python
班组长的岗位职责
2013/12/09 职场文书
七年级数学教学反思
2014/01/22 职场文书
大专学生求职自荐信
2014/07/06 职场文书
革命英雄事迹演讲稿
2014/09/13 职场文书
单位婚育证明范本
2014/11/21 职场文书
大四学生个人总结
2015/02/15 职场文书
浅谈mysql哪些情况会导致索引失效
2021/11/20 MySQL