PHP获取客户端IP的方法
简介在使用Laravel获取客户端IP的时候出现了这样一种常见,我们通过阿里云ECS部署的代码,但是前面通过阿里云的LSB(负载均衡)。所以每次通过Laravel自带的函数去获取IP的时候,总是不能获取到真实的客户端IP。所以这里主要记录下获取真实客户端IP的方法。
获取客户端IP的原理
- HTTP_X_FORWARDED_FOR 是用户到达最终访问地时经过的路径访问点(包括自身和使用的多层代理)的IP列表。依然取决于代理的设置,可通过http头伪造;
- HTTP_CLIENT_IP 是代理服务器设置发送的HTTP头,代表你的客户端的真实IP。当然,人家可以选择设置与否以及设置成什么样。可通过http头伪造;
- REMOTE_ADDR 是你的客户端跟服务器“握手”时候的IP。如果使用代理,REMOTE_ADDR将显示代理服务器的IP。可能是用户真实IP也可能是代理IP
获取ip地址的两个方法:
- 1.超级全局变量$_SERVER[‘REMOTE_ADDR’]
- 2.getenv()函数获取环境变量的值。(注意这个函数不支持IIS下的php)
对应函数
function getIp(){
if (getenv("HTTP_CDN_SRC_IP") && strcasecmp(getenv("HTTP_CDN_SRC_IP"), "unknown"))
$ip = getenv("HTTP_CDN_SRC_IP");
else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else 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'];
else
$ip = "";
return $ip;
}
改写方式
function getIp()
{
$arr_ip_header = [
'HTTP_CDN_SRC_IP',
'HTTP_PROXY_CLIENT_IP',
'HTTP_WL_PROXY_CLIENT_IP',
'HTTP_CLIENT_IP',
'HTTP_X_FORWARDED_FOR',
'REMOTE_ADDR',
];
$client_ip = 'unknown';
foreach ($arr_ip_header as $key) {
if (!empty($_SERVER[$key]) && strtolower($_SERVER[$key]) != 'unknown') {
$client_ip = $_SERVER[$key];
break;
}
}
return $client_ip;
}
在使用功能镜像的时候,需要对时区进行修改,那么就需要从两个方面来考虑,本文主要记录Dockerfile和docker-compose.yml设置时区。
《是妈妈是女儿》聚焦母女间未曾言明的爱意,以书信对话的形式呈现出各自的内心独白,表达彼此的牵挂。黄绮珊与希林娜依·高用跨越时空、打开心扉、深情对唱的形式,将天下母女爱的寄语化作心灵的倾诉。黄绮珊的每一句话,每一个字都演绎出了妈妈对女儿的爱,而希林依娜·高把女儿对妈妈的爱由不理解到理解再到感恩演绎得淋漓尽致。
OpenCV-Python读取、显示和保存图片,主要介绍如下函数的使用:imread、imshow、imwrite。读取图片使用imread函数,注意:opencv读取图片,默认颜色通道是BGR,而不是RGB。使用imshow函数即可,第一个参数表示窗口名称,第二个参数就是要显示的图像。保存图片使用imwrite函数, 第一个参数为要保存的路径和名称,第二个参数为图片,最后一个参数为可选项。
安装strapi出现错误:error Error: certificate has expired,TypeError: Cannot read properties of undefined (reading 'addBreadcrumb')
you-get是一个基于Python的开源命令行工具,主要用于下载来自多个视频网站的视频、音频和图片资源。它支持YouTube、Bilibili、Vimeo等平台,可通过简单命令快速获取下载链接并支持自定义保存路径和格式。
快速生成表格
Electron页面跳转、浏览器打开链接和打开新窗口
Docker编译镜像出现:fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.12/main: temporary error (try again later)
WARNING: Ignoring APKINDEX.2c4ac24e.tar.gz: No such file or directory问题
在使用Git的过程中,不想每次都输入用户名和密码去拉取代码,所以就需要保存这些信息,那么既然有保存了,就必须有清除功能。
在Mac电脑中,如何对Git的用户名和密码进行修改呢?起初不懂Mac,所以整了很久,本文将记录如何对这个进行操作,以便后期使用。