php怎样在php8获取本机ip_php8新特性取ip法【步骤】
技术百科
星夢妙者
发布时间:2026-01-27
浏览: 次 PHP 8 并无获取本机真实网卡 IP 的新函数,需依场景选择方法:CLI 下用系统命令或 socket_gethostbyname() 配合过滤;Web 中客户端 IP 应优先用 $_SERVER['REMOTE_ADDR'],代理环境下按 HTTP_X_REAL_IP 等顺序校验并过滤私有地址。
PHP 8 中获取本机 IP 的常见误区
直接调用 $_SERVER['SERVER_ADDR'] 是最常用做法,但它返回的是 Web 服务器监听的 IP(比如 127.0.0.1 或 0.0.0.0),不是本机真实网卡 IP。PHP 8 并没有新增专门取本机 IP 的函数,所谓“PHP 8 新特性取 IP 法”是误传——关键在于你到底要什么 IP:监听地址、客户端来源、还是本机对外网卡地址?
获取本机真实网卡 IP(非 127.0.0.1)
适用于 CLI 脚本或需要绑定到具体网卡的场景(如启动 socket 服务)。PHP 本身不提供跨平台获取网卡 IP 的内置函数,需依赖系统命令或扩展:
- Linux/macOS 下可用
exec('hostname -I | awk \'{print $1}\'')(注意空格和引号转义) - Windows 下建议用
exec('ipconfig | findstr "IPv4" | findstr -v "127.0.0.1" | head -n 1 | awk "{print $15}"'),但更稳妥是解析gethostbyname(gethostname())——它在多数配置下能返回首个非 loopback 地址 - 若已安装
sockets扩展,可用socket_gethostbyname(gethostname()),但该函数不保证跳过127.0.0.1,需手动过滤
Web 环境中获取客户端真实 IP(防代理伪造)
这不是“本机 IP”,但常被混淆。PHP 8 对 $_SERVER 数组的键名校验更严格(如禁用某些非法头),所以不能盲目信任 $_SERVER['HTTP_X_FORWARDED_FOR']:
- 优先检查
$_SERVER['REMOTE_ADDR']—— 它是 TCP 连接发起方 IP,不可伪造(除非前端有透明代理) - 若确实在 Nginx/Apache 后使用可信反向代理,再按顺序判断:
$_SERVER['HTTP_X_REAL_IP']→$_SERVER['HTTP_X_FORWARDED_FOR'](只取第一个非私有 IP) - PHP 8.1+ 支持
filter_var($ip, FILTER_VALIDATE_IP, FILTER_F快速排除内网/保留地址
LAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)
为什么 gethostbyname(gethostname()) 有时返回 127.0.0.1
这跟系统 hosts 配置强相关。Linux/macOS 下检查 /etc/hosts 是否把主机名映射到了 127.0.0.1;Windows 查 C:\Windows\System32\drivers\etc\hosts。修复方法:
- 临时绕过:用
gethostbyaddr($_SERVER['SERVER_ADDR'])反查,再重新解析(仅当SERVER_ADDR是真实网卡 IP 时有效) - 长期方案:修改 hosts,将主机名指向实际网卡 IP(如
192.168.1.100 myserver.local),并确保 DNS 或本地解析生效 - 注意:PHP 8 默认启用
opcache.validate_root,修改 hosts 后可能需重启 PHP-FPM 或清除 opcache
真正可靠的本机 IP 获取,从来不是靠一个函数,而是结合运行环境、网络拓扑和安全边界做判断。尤其在容器或云主机里,eth0 地址、169.254.169.254 元数据接口、甚至 /proc/net/route 解析,都比寄希望于某个“PHP 8 新函数”更实际。
# 的是
# 它在
# 它是
# 第一个
# windows
# 适用于
# 客户端
# mac
# win
# 运行环境
# linux
# dns
# macos
# cos
# 接口
# 前端
# php
# php8
# apache
# nginx
# 这不是
# print
# 本机
# filter_var
# 你到底
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- c++中如何使用虚函数实现多态_c++多态性实现原
- c++ stringstream用法详解_c++字
- php修改数据怎么改富文本_update更新htm
- php嵌入式多设备通信怎么实现_php同时管理多个
- Windows10怎样设置家长控制_Windows
- php8.4如何调用com组件_php8.4win
- MAC怎么用连续互通相机里的“桌上视角”_MAC在
- 如何使用Golang捕获测试日志_Golang t
- Windows如何使用BitLocker To G
- Windows蓝屏BAD_POOL_HEADER故
- c++如何打印函数堆栈信息_c++ backtra
- 如何在Golang中编写端到端测试_Golang
- Python深度学习实战教程_神经网络模型构建与训
- Win11怎么检查TPM2.0模块_Windows
- Win10闹钟铃声怎么自定义 Win10闹钟自定义
- XAMPP 启动失败(Apache 突然停止)的终
- Windows10怎样连接蓝牙设备_Windows
- Win11怎么设置应用分屏_Windows11贴靠
- php修改数据怎么批量改状态_批量更新status
- PHP cURL GET请求:正确设置请求头与身份
- 如何优化Golang程序CPU性能_Golang
- Win10怎么卸载剪映_Win10彻底卸载剪映方法
- Flask 表单数据通过 SMTP 发送邮件的完整
- How to Properly Use NumPy
- 如何使用正则表达式批量替换重复的 *- 模式为固定
- Win11怎么关闭透明效果_Windows11辅助
- Windows10如何更改开机密码_Win10登录
- Win11右键反应慢怎么办 Win11优化右键菜单
- php订单日志怎么按金额排序_php按订单金额排序
- Win11怎样激活系统密钥_Win11系统密钥激活
- Windows10电脑怎么设置防火墙出站规则_Wi
- 短链接怎么自定义还原php_修改解码规则适配需求【
- 如何使用Golang encoding/json解
- Win11如何开启telnet服务 Win11启用
- 如何使用Golang实现聊天室消息存档_存储聊天记
- 如何更改Windows资源管理器的默认启动位置?(
- Windows怎样关闭锁屏广告_Windows关闭
- Windows系统被恶意软件破坏后的恢复策略_错误
- windows如何修改文件默认打开方式_windo
- Win11如何更改用户账户文件夹名称 Win11修
- Win11如何隐藏桌面图标 Win11一键隐藏/显
- TestNG的testng.xml配置文件怎么写
- Win10如何备份驱动程序_Win10驱动备份步骤
- 如何在Golang中实现并发消息队列消费者_Gol
- Mac如何开启夜览模式_Mac护眼模式设置与定时
- 如何在Golang中定义接口_抽象方法和多态实现
- Python与MongoDB NoSQL开发实战_
- Python代码测试策略_质量保障解析【教程】
- 如何开启Windows的远程服务器管理工具(RSA
- Win11如何更新显卡驱动 Win11检查和安装设


QQ客服