2025年8月最新动态
随着全球IPv6部署率突破65%,开发者对服务器和客户端IP获取的兼容性要求越来越高,多家云服务商(如AWS、阿里云)已默认启用双栈支持,这意味着你的PHP代码可能需要同时处理IPv4和IPv6地址的场景。
无论是做访问统计、地域限制,还是安全审计,获取服务器信息和IP都是基础操作。
$_SERVER
最常用的方法,包含Web服务器、PHP环境等信息:
echo "服务器软件:" . $_SERVER['SERVER_SOFTWARE']; // 如Apache/2.4.56 echo "PHP版本:" . phpversion(); echo "服务器协议:" . $_SERVER['SERVER_PROTOCOL']; // HTTP/1.1
phpinfo()
函数一键输出所有信息(仅限调试环境使用):
phpinfo(INFO_ALL); // 小心!不要在生产环境暴露
getenv()
读取环境变量适合Docker等容器化环境:
echo "数据库主机:" . getenv('DB_HOST');
Linux服务器可调用shell:
$cpu = shell_exec('cat /proc/cpuinfo | grep "model name" | head -1'); echo "CPU型号:" . $cpu;
$serverIP = $_SERVER['SERVER_ADDR']; // 如192.168.1.100
如果你的服务器前面有Nginx/CDN:
$serverIP = $_SERVER['SERVER_ADDR'] ?? gethostbyname(gethostname());
适用于云服务器:
$publicIP = file_get_contents('https://api.ipify.org'); // 注意:需要allow_url_fopen开启
$clientIP = $_SERVER['REMOTE_ADDR'];
$clientIP = $_SERVER['HTTP_X_FORWARDED_FOR'] ?? $_SERVER['HTTP_CLIENT_IP'] ?? $_SERVER['REMOTE_ADDR'];
HTTP_X_FORWARDED_FOR
可能被伪造,需过滤: $ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); $clientIP = trim($ips[0]);
if (filter_var($clientIP, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) { echo "这是一个IPv6地址"; }
HTTP_
开头的头信息都可伪造 phpinfo()
:会泄露PHP路径、数据库账号等敏感信息 HTTP_X_AWS_EC2_IP
$log = sprintf( "[%s] 客户端IP:%s | 访问URL:%s | 浏览器:%s\n", date('Y-m-d H:i:s'), $_SERVER['HTTP_X_REAL_IP'] ?? $_SERVER['REMOTE_ADDR'], $_SERVER['REQUEST_URI'], $_SERVER['HTTP_USER_AGENT'] ); file_put_contents('access.log', $log, FILE_APPEND);
从$_SERVER
的基础使用到代理环境下的IP获取,再到IPv6的兼容处理,掌握这些技巧能让你的应用更健壮,记得根据实际场景选择方案,比如内网服务直接用SERVER_ADDR
,面向用户的系统则要严格验证代理IP。
(本文方法测试于PHP 8.3环境,主流云平台均验证通过)
本文由 祭煜 于2025-08-01发表在【云服务器提供商】,文中图片由(祭煜)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/510104.html
发表评论