应使用 phpinfo(INFO_MODULES | INFO_CONFIGURATION) 仅显示已加载扩展和生效配置项,或直接调用 get_loaded_extensions() 和 ini_get() 获取关键参数,避免冗余信息与安全风险。
默认 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() 仍会暴露服务器路径、扩展版本、编译参数等敏感信息。生产环境必须加访问控制:
allow/deny 限制 IP:allow 127.0.0.1; deny all;
.htaccess:加入 Require local(Apache 2.4+)或 Order deny,allow + Allow from 127.0.0.1
phpinfo.php 改名成随机字符串(如 _dbg_x9a2.php),且不提交进 Git有人想用 ob_start() + phpinfo() + ob_get_contents() 再 preg_match() 提取关键字段——这方法看着灵活,实则问题多:
ob_start() 嵌套易出错phpinfo() 输出结构随 PHP 版本变化(比如 PHP 8.1 后移除了 register_globals 相关块),正则极易失效get_loaded_extensions() 和 ini_get() 稳定可靠真正需要“提炼”的不是怎么从大段 HTML 里扒数据,而是意识到:phpinfo 的原始输出从来就不是为程序解析设计的,它的替代方案早就内建在 PHP 运行时里了。
来电咨询