phpinfo() 无法直接显示 PHP 编译参数,仅能间接推断部分选项是否启用;准确获取需执行 php-config --configure-options 或检查构建日志、Dockerfile。

不能直接从 phpinfo() 页面读出完整的 PHP 编译参数(如 --with-mysql、--enable-opcache 等),但能间接推断部分关键选项是否启用,前提是知道哪些配置项对应哪些编译行为。
phpinfo() 显示的是运行时配置,不是编译时参数
phpinfo() 输出的是 PHP 启动后加载的模块、环境变量、INI 设置和已启用的功能列表,它不包含原始 ./configure 命令。比如你看到 opcache.enable => On,只能说明 OPcache 模块存在且已启用,但无法确认它是静态编译进 PHP 还是作为动态扩展加载的。
- 静态编译的模块(如
--with-curl)在phpinfo()中通常表现为“已支持”或直接显示版本(如cURL support => enabled) - 动态扩展(如
extension=redis.so)则依赖Loaded Modules或Additional .ini files parsed区域判断是否被加载 -
Configure Command这一行在某些 PHP 版本(尤其是源码编译且未禁用--enable-display-errors时)可能残留,但默认关闭,生产环境几乎看不到
查真实编译参数必须用命令行工具
要拿到准确的编译选项,唯一可靠方式是登录服务器执行命令:
php-config --configure-options
该命令只在 PHP 源码编译安装、且保留了 php-config 工具时可用(包管理器安装如 apt/yum/dnf 通常不提供)。如果返回 command not found,说明没有这个工具。
立即学习“PHP免费学习笔记(深入)”;
- Debian/Ubuntu 用户可尝试:
apt install php-dev
(但仅对系统自带 PHP 有效,且不一定还原原始编译参数) - 若 PHP 是通过
phpbrew或asdf安装的,可用对应工具查:phpbrew config show
- 实在找不到,可检查
php -i | grep "Configure Command"—— 极少数编译时加了--enable-debug或未清除构建信息,这里会残留字符串
通过 phpinfo() 逆向验证常见编译选项
虽然看不到参数本身,但很多编译开关会影响运行时表现,可据此交叉验证:
-
--disable-cgi→ 若Server API显示cli或fpm-fcgi,但无cgi-fcgi,大概率禁用了 CGI 支持 -
--without-sqlite3→ 查看PDO drivers和sqlite3扩展是否存在;若sqlite3.version为not loaded,且pdo_sqlite也不在 Loaded Modules 里,则很可能未编译 -
--enable-opcache→ 看Opcode Caching是否为Enabled,且opcache.restrict_api等字段可配置,说明是内置模块(非extension=opcache.so) -
--with-pdo-mysql→ 单看PDO drivers有mysql不够,还要确认mysqlnd或mysqli是否同时存在;若只有mysql驱动但无mysqli,可能是旧版 libmysql 而非 mysqlnd
真正想确认某个选项是否启用,光靠 phpinfo() 总是少一层证据。最稳的做法:先 php -m | grep opcache 看模块名,再 php-config --configure-options 2>/dev/null || echo "no php-config",最后 fallback 到翻构建日志或容器 Dockerfile —— 编译参数这东西,从来就不是靠页面猜出来的。











