phpinfo() 默认显示服务器基础信息,包括Web服务器类型、操作系统、架构等,但不显示IP、主机名、CPU型号等硬件信息;线上环境严禁公开该页面以防信息泄露。

phpinfo() 默认会显示服务器基础信息
是的,phpinfo() 会输出当前 PHP 运行环境的完整快照,其中包含 Web 服务器类型(如 Apache、nginx、PHP built-in server)、操作系统(Linux、Windows)、架构(x86_64)、内核版本(部分可见)、以及服务器软件的编译参数和模块加载状态。
但要注意:它不直接显示服务器 IP、主机名、物理 CPU 型号或内存总量这类系统级硬件信息——这些属于操作系统范畴,PHP 默认无权读取,除非通过 exec() 或 shell_exec() 调用系统命令(且需权限允许)。
如何安全地查看关键服务器参数
在 phpinfo() 页面中,重点关注以下区块:
-
PHP Version和System行:显示内核+系统版本(如Linux 5.15.0-107-generic) -
Server API:明确是apache2handler、fpm-fcgi还是cli -
Loaded Configuration File:指向实际生效的php.ini路径 -
Scan this dir for additional .ini files:额外 ini 加载目录,常被忽略但影响配置生效 -
$_SERVER['SERVER_SOFTWARE']在“Environment”或“PHP Variables”区可查到完整服务标识(如nginx/1.22.1)
若需更底层信息(如 CPU 核心数、内存),可补充使用:
立即学习“PHP免费学习笔记(深入)”;
echo 'CPU cores: ' . sys_getloadavg()[0] . "\n";
echo 'Memory limit: ' . ini_get('memory_limit') . "\n";
// 注意:gethostname() 和 php_uname('n') 可能返回主机名,但不等同于服务器公网 IP
为什么线上环境严禁公开 phpinfo() 页面
因为 phpinfo() 泄露的信息远超预期:
- 暴露
DOCUMENT_ROOT、SCRIPT_FILENAME等路径,便于攻击者定位源码位置 - 显示已启用的扩展(如
pdo_mysql、openssl),间接揭示数据库/加密能力 - 列出所有
$_ENV和$_SERVER变量,可能含敏感键(如DB_PASSWORD若误注入环境变量) - 显示
open_basedir限制是否启用——若未启用,配合文件函数可遍历整个文件系统
常见错误是把 phpinfo.php 上传到网站根目录后忘记删除,或通过 Nginx/Apache 配置错误导致被直接访问。
替代方案:只输出你需要的服务器参数
生产环境应避免全量 phpinfo(),改用按需查询:
// 获取 Web 服务器标识
echo $_SERVER['SERVER_SOFTWARE'] ?? 'Unknown server';
// 获取 PHP 运行模式
echo PHP_SAPI; // 返回 'fpm-fcgi', 'apache2handler', 'cli' 等
// 查看关键配置项(比 phpinfo 更轻量)
var_dump([
'memory_limit' => ini_get('memory_limit'),
'max_execution_time' => ini_get('max_execution_time'),
'upload_max_filesize' => ini_get('upload_max_filesize'),
'opcache_enabled' => extension_loaded('opcache') && ini_get('opcache.enable'),
]);
真正容易被忽略的是:即使关闭了 display_errors,只要 phpinfo() 文件存在且可访问,所有信息仍会明文暴露——它不依赖错误报告级别,也不受 disable_functions 影响(除非显式禁用该函数本身)。











