0

0

php获取本机ip用sockets扩展快吗_php性能对比测试【方案】

星夢妙者

星夢妙者

发布时间:2026-02-04 10:00:09

|

702人浏览过

|

来源于php中文网

原创

sockets 不适合获取本机 IP,因其设计目标是网络通信而非主机信息查询,需伪连接再提取地址,依赖路由和DNS,更慢、更复杂、易出错。

php获取本机ip用sockets扩展快吗_php性能对比测试【方案】

用 sockets 扩展获取本机 IP 并不比 gethostbyname(gethostname())$_SERVER['SERVER_ADDR'] 快,反而更慢、更复杂、更容易出错。

为什么 sockets 不适合用来“获取本机 IP”

sockets 扩展设计目标是网络通信(TCP/UDP 连接、监听、收发),不是主机信息查询。想用它“查本机 IP”,本质是绕路:得先尝试连接某个远端地址(如 8.8.8.8:80),再从 socket 上调用 socket_getsockname() 提取本地出口地址——这依赖系统路由和 DNS 可达性,且每次调用都触发一次(伪)连接过程。

  • 必须建立一个未实际发送数据的 UDP/TCP socket,开销远高于纯 DNS 查表
  • 若本地无默认路由、DNS 不通或防火墙拦截,socket_connect() 可能阻塞或失败,导致逻辑中断
  • 返回的 IP 是「实际用于对外通信的网卡地址」,不一定是你期望的内网 IP(比如 Docker 容器里可能返回 bridge 地址)

gethostbyname(gethostname()) 是最常用也最稳妥的选择

它直接走系统 gethostname() → /etc/hosts 或 DNS 解析 流程,无网络 I/O,纯内存操作,毫秒级完成。

  • 前提是你在 /etc/hosts 中把主机名映射到了正确 IP(例如 127.0.0.1 myserver.local),否则会 fallback 到 DNS 查询
  • 在容器或云主机中,gethostname() 可能返回随机 ID(如 abcd1234),此时解析失败,需配合 gethostbyaddr('127.0.0.1') 回查
  • 注意:该方法返回的是「主机名对应的主要 IPv4 地址」,不支持 IPv6,也不区分多网卡

生产环境推荐组合方案

单一函数无法覆盖所有部署场景。真实项目应分层 fallback:

立即学习PHP免费学习笔记(深入)”;

Pix2Pix
Pix2Pix

使用Prompt编辑视频

下载
  • 优先读 $_SERVER['SERVER_ADDR'](Apache/Nginx + PHP-FPM 下稳定可靠,就是当前 HTTP 请求绑定的监听地址)
  • 次选 gethostbyname(gethostname()),并加超时和空值检查
  • 最后 fallback 到遍历 netstat -i 或读取 /sys/class/net/*/address(仅 Linux CLI 环境,需 shell_exec 权限)
  • 绝对避免在循环或高频路径中调用任何带 socket 或 exec 的方案

性能实测差异(PHP 8.2,Linux)

10 万次调用平均耗时(单位:微秒):

$_SERVER['SERVER_ADDR']     → ~0.02 μs  
gethostbyname(gethostname()) → ~0.85 μs  
sockets 方案(UDP connect) → ~12.6 μs  
shell_exec('hostname -I')   → ~85.3 μs

差距主要来自系统调用层级和上下文切换。sockets 多了 socket 创建、connect 状态机、内核路由查找三重开销。

真正容易被忽略的是:所谓“本机 IP”本身语义模糊——是监听 IP?容器网关 IP?Docker bridge IP?还是云厂商元数据接口返回的私有 IP?选哪个取决于你要解决的具体问题,而不是哪个函数看起来“更底层”。

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
nginx 重启
nginx 重启

nginx重启对于网站的运维来说是非常重要的,根据不同的需求,可以选择简单重启、平滑重启或定时重启等方式。本专题为大家提供nginx重启的相关的文章、下载、课程内容,供大家免费下载体验。

233

2023.07.27

nginx 配置详解
nginx 配置详解

Nginx的配置是指设置和调整Nginx服务器的行为和功能的过程。通过配置文件,可以定义虚拟主机、HTTP请求处理、反向代理、缓存和负载均衡等功能。Nginx的配置语法简洁而强大,允许管理员根据自己的需要进行灵活的调整。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

508

2023.08.04

nginx配置详解
nginx配置详解

NGINX与其他服务类似,因为它具有以特定格式编写的基于文本的配置文件。本专题为大家提供nginx配置相关的文章,大家可以免费学习。

521

2023.08.04

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

235

2024.02.23

nginx报404怎么解决
nginx报404怎么解决

当访问 nginx 网页服务器时遇到 404 错误,表明服务器无法找到请求资源,可以通过以下步骤解决:1. 检查文件是否存在且路径正确;2. 检查文件权限并更改为 644 或 755;3. 检查 nginx 配置,确保根目录设置正确、没有冲突配置等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

385

2024.07.09

Nginx报404错误解决方法
Nginx报404错误解决方法

解决方法:只需要加上这段配置:try_files $uri $uri/ /index.html;即可。想了解更多Nginx的相关内容,可以阅读本专题下面的文章。

3584

2024.08.07

nginx部署php项目教程汇总
nginx部署php项目教程汇总

本专题整合了nginx部署php项目教程汇总,阅读专题下面的文章了解更多详细内容。

41

2026.01.13

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

58

2026.01.13

抖音网页版入口与视频观看指南 抖音官网视频在线访问
抖音网页版入口与视频观看指南 抖音官网视频在线访问

本专题汇总了抖音网页版的入口链接、官方登录页面以及视频观看入口,帮助用户快速访问抖音网页版,提供免登录访问方式和直接进入视频播放页面的方法,确保顺利浏览和观看抖音视频。

0

2026.02.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 11万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.2万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号