应使用 phpinfo(INFO_MODULES | INFO_CONFIGURATION) 仅显示已加载扩展和生效配置项,或直接调用 get_loaded_extensions() 和 ini_get() 获取关键参数,避免冗余信息与安全风险。

只显示 phpinfo 的核心模块和配置项
默认 phpinfo() 输出 100+ 行冗余信息,调试时根本找不到关键项。直接禁用完整输出,改用 phpinfo(INFO_MODULES | INFO_CONFIGURATION) 组合参数——它只展示已加载的扩展列表(如 mysqli、openssl)和 php.ini 中实际生效的配置项(如 memory_limit、upload_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() 仍会暴露服务器路径、扩展版本、编译参数等敏感信息。生产环境必须加访问控制:
立即学习“PHP免费学习笔记(深入)”;
- 在 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 运行时里了。











