怎样让phpinfo只显核心项_聚焦phpinfo关键数据窍门【提炼】

应使用 phpinfo(INFO_MODULES | INFO_CONFIGURATION) 仅显示已加载扩展和生效配置项,或直接调用 get_loaded

_extensions() 和 ini_get() 获取关键参数,避免冗余信息与安全风险。

只显示 phpinfo 的核心模块和配置项

默认 phpinfo() 输出 100+ 行冗余信息,调试时根本找不到关键项。直接禁用完整输出,改用 phpinfo(INFO_MODULES | INFO_CONFIGURATION) 组合参数——它只展示已加载的扩展列表(如 mysqliopenssl)和 php.ini 中实际生效的配置项(如 memory_limitupload_max_filesize),跳过环境变量、HTTP 头、版权说明等干扰内容。

  • INFO_MODULES:列出所有启用的扩展及其版本,不含描述性文字
  • INFO_CONFIGURATION:仅显示 php.ini 里被显式设置的值,忽略默认值
  • 避免用 INFO_ALL 或不传参,那是信息过载的根源

过滤出你真正关心的几行配置

如果连 INFO_CONFIGURATION 都嫌多,就别调 phpinfo() 了。直接读取并输出关键键值:

echo 'PHP Version: ' . PHP_VERSION . "\n";
echo 'Loaded Extensions: ' . implode(', ', get_loaded_extensions()) . "\n";
echo 'memory_limit: ' . ini_get('memory_limit') . "\n";
echo 'max_execution_time: ' . ini_get('max_execution_time') . "\n";
echo 'display_errors: ' . (ini_get('display_errors') ? 'On' : 'Off') . "\n";

这种写法可控、无 HTML、适合 CLI 调试或部署检查脚本。注意 ini_get() 返回的是当前生效值(含 .htaccess 或 ini_set() 覆盖后的结果),比翻 php.ini 文件更准。

禁止远程访问 phpinfo 页面的硬性防护

哪怕只显示核心项,phpinfo() 仍会暴露服务器路径、扩展版本、编译参数等敏感信息。生产环境必须加访问控制:

  • 在 Nginx 配置中用 allow/deny 限制 IP:allow 127.0.0.1; deny all;
  • Apache 下用 .htaccess:加入 Require local(Apache 2.4+)或 Order deny,allow + Allow from 127.0.0.1
  • 更彻底的做法:把 phpinfo.php 改名成随机字符串(如 _dbg_x9a2.php),且不提交进 Git

为什么不用 ob_get_contents() 截取再正则过滤?

有人想用 ob_start() + phpinfo() + ob_get_contents()preg_match() 提取关键字段——这方法看着灵活,实则问题多:

  • 输出缓冲可能被已有代码开启过,ob_start() 嵌套易出错
  • phpinfo() 输出结构随 PHP 版本变化(比如 PHP 8.1 后移除了 register_globals 相关块),正则极易失效
  • HTML 格式混杂表格、颜色、换行,解析成本高,还可能漏掉动态加载的扩展
  • 不如直接调用 get_loaded_extensions()ini_get() 稳定可靠

真正需要“提炼”的不是怎么从大段 HTML 里扒数据,而是意识到:phpinfo 的原始输出从来就不是为程序解析设计的,它的替代方案早就内建在 PHP 运行时里了。