phpinfo输出含服务器信息吗_查看服务器参数借助phpinfo【查阅】

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

phpinfo() 默认会显示服务器基础信息

是的,phpinfo() 会输出当前 PHP 运行环境的完整快照,其中包含 Web 服务器类型(如 ApachenginxPHP built-in server)、操作系统(LinuxWindows)、架构(x86_64)、内核版本(部分可见)、以及服务器软件的编译参数和模块加载状态。

但要注意:它不直接显示服务器 IP、主机名、物理 CPU 型号或内存总量这类系统级硬件信息——这些属于操作系统范畴,PHP 默认无权读取,除非通过 exec()shell_exec() 调用系统命令(且需权限允许)。

如何安全地查看关键服务器参数

phpinfo() 页面中,重点关注以下区块:

  • PHP VersionSystem 行:显示内核+系统版本(如 Linux 5.15.0-107-generic
  • Server API:明确是 apache2handlerfpm-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 核心数、内存),可补充使用:

echo 'CPU cores: ' . sys_getloadavg()[0] . "\n";
echo 'Memory limit: ' . ini_get('memory_limit') . "\n";
// 注意:gethostname() 和 php_uname('n') 可能返回主机名,但不等同于服务器公网 IP

为什么线上环境严禁公开 phpinfo() 页面

因为 phpinfo() 泄露的信息远超预期:

  • 暴露 DOCUMENT_ROOTSCRIPT_FILENAME 等路径,便于攻击者定位源码位置
  • 显示已启用的扩展(如 pdo_mysqlopenssl),间接揭示数据库/加密能力
  • 列出所有 $_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 影响(除非显式禁用该函数本身)。