phpinfo() 显示的是当前 PHP 运行环境的实际生效配置快照,受加载顺序、SAPI 类型和 ini 覆盖逻辑影响;重点看 Loaded Configuration File、Scan this dir、PHP Extension 表格、Server API 和关键数值配置是否正确。

phpinfo() 输出的不是“所有配置”,而是当前 PHP 运行环境的快照,关键在于它只反映 实际生效的配置项,且受加载顺序、SAPI 类型、ini 文件覆盖逻辑影响。直接调用 phpinfo() 看到的内容,未必等于你改了 php.ini 就立刻生效。
哪些信息最值得盯住看?
重点不是“全不全”,而是“对不对”。以下几类信息出错会直接导致功能异常:
-
Loaded Configuration File:显示当前生效的php.ini路径。如果为空或路径不对,说明你改的不是那个文件 -
Scan this dir for additional .ini files:很多 Linux 发行版(如 Ubuntu)把扩展配置拆到/etc/php/*/cli/conf.d/或/etc/php/*/fpm/conf.d/,extension=指令常在这里被启用 -
PHP Extension表格里有没有mysqli、pdo_mysql、openssl、curl—— 缺一个,对应功能就挂 -
Server API:值是apache2handler、fpm-fcgi还是cli?不同 SAPI 加载的 ini 文件可能完全不同 -
memory_limit、max_execution_time、upload_max_filesize:这些数值是否和你预期一致?注意单位(M表示 MiB,不是 MB)
为什么改了 php.ini 却没在 phpinfo 里体现?
常见原因不是函数失效,而是配置根本没加载进来:
- 改错了文件:运行
php --ini(CLI)或查看phpinfo()中Loaded Configuration File,确认路径 - 改了 CLI 的
php.ini,但 Web 用的是 FPM 或 Apache 模块,它们各自有独立配置路径 - 扩展通过
extension_dir指向了错误目录,extension=xxx.so会静默失败(phpinfo()里不显示该扩展) - 使用了
ini_set()在脚本中覆盖了某些值(如ini_set('display_errors', '1')),phpinfo()会显示运行时值,而非 ini 文件原始值
phpinfo 页面里容易被忽略的危险信号
这些不是报错,但往往预示着部署隐患:
立即学习“PHP免费学习笔记(深入)”;
-
display_errors=On(尤其在线上环境):泄露路径、变量名、数据库结构,应设为Off,错误记入日志 -
expose_php=On:响应头带X-Powered-By: PHP/8.x.x,增加指纹暴露风险 -
disable_functions为空或只禁了几个无关函数:生产环境建议禁用exec、shell_exec、system、passthru、proc_open、popen -
session.save_handler是files且session.save_path指向临时目录(如/tmp):高并发下 I/O 瓶颈明显,应切到redis或memcached
echo ""; print_r([ 'php_version' => PHP_VERSION, 'sapi' => PHP_SAPI, 'ini_file' => php_ini_loaded_file(), 'ini_scanned' => php_ini_scanned_files(), ]); echo "";比起完整
phpinfo()页面,有时只需这几行就能快速确认基础环境状态。真正麻烦的从来不是信息太少,而是你没意识到哪一行不该出现在生产环境的输出里。











