phpinfo() 主要显示 Configure Command(可能为空)、Build Date、Server API、Architecture 等构建线索,但不暴露完整 configure 参数或构建时间;PHP_COMPILER、ZEND_EXTENSION_API_NO 等常量可补充编译器与 ABI 信息。

phpinfo() 能看到哪些构建信息
phpinfo() 是最直接的途径,但它默认只显示部分编译配置,不暴露完整 ./configure 参数或具体构建时间。页面中「Configure Command」字段会列出原始 configure 命令(如果 PHP 编译时未禁用),而「Server API」、「Architecture」、「Configure Options」等区块也隐含关键线索。
- 「Configure Command」存在 ≠ 一定可见:某些发行版(如 Ubuntu 的
php7.4-cli包)会清空该字段,返回Configure Command => (none) - 「Build Date」是源码编译时间,不是安装时间,和系统当前时间无关
- 「API」值(如
20190902)对应 Zend API 版本,可用于判断 ABI 兼容性,但不是构建信息本身
php -i 和 php -r 'print_r(get_defined_constants(true)["core"]);' 的差异
php -i 等价于命令行下的 phpinfo(),输出格式为纯文本;而 php -r 方式可定向提取常量,但需注意:get_defined_constants(true) 的 "core" 分组里只有少量构建相关常量,比如 ZEND_EXTENSION_API_NO、PHP_COMPILER、PHP_OS,并不包含 --with-xxx 参数。
-
PHP_COMPILER显示编译器型号与版本(如gcc 11.4.0),但不带编译参数 -
PHP_CONFIG_FILE_PATH和PHP_CONFIG_FILE_SCAN_DIR可辅助定位实际生效的配置路径,间接反映打包方式 - 想查 OpenSSL 使用版本?得看
php -r "print OPENSSL_VERSION_TEXT;",它来自运行时链接的库,不是编译时指定的
从二进制文件头读取原始 configure 参数(Linux/macOS)
如果 phpinfo() 中 Configure Command 为空,且你有 PHP 可执行文件权限,可以尝试从二进制中搜索字符串:
strings $(which php) | grep -E '^\-\-with|\-\-enable|prefix=' | head -n 20
这个方法依赖于 configure 参数被静态写入二进制字符串段,成功率取决于编译时是否 strip 过符号表。Debian/Ubuntu 官方包通常已 strip,CentOS/RHEL 的源码编译版更可能保留。
MayiCMS·蚂蚁分类信息系统是一款基于PHP+MYSQL(PC+手机+小程序+APP,跨平台、跨终端)的建站软件,拥有专业且完善的信息审核机制,信息刷新/置顶消费机制,信息分享/发布奖励机制,信息查看/付费授权机制,会员等级自助续费机制,为在各种类型操作系统服务器上架设信息发布平台提供完美的解决方案,拥有世界一流的用户体验,卓越的访问速度和负载能力。功能特点:1,PC手机自适应,URL路径完全
立即学习“PHP免费学习笔记(深入)”;
- 结果可能混杂调试信息或旧残留参数,需人工甄别
-
php-config --configure-options更可靠,但仅当安装了php-dev(或php-devel)包才可用 - 容器环境(如
php:8.2-cli)中,php-config默认不存在,需改用docker exec -it container php -m配合模块列表反推扩展来源
为什么 phpversion() 和 ZEND_VERSION() 不算构建信息
phpversion() 返回运行时 PHP 版本字符串(如 "8.2.12"),ZEND_VERSION() 返回 Zend 引擎版本(如 "4.2.12"),二者均由宏定义生成,与构建过程无直接关联。它们不体现是否启用了 JIT、是否静态链接 libc、是否使用 system ICU 等关键构建决策。
- 区分
php -v输出里的(cli)和(fpm-fcgi)属于 SAPI 类型,不是构建选项 - 真正影响行为的是
./configure --enable-jit=opcache这类开关,它不会改变phpversion()结果,但会让opcache.jit_buffer_size生效 - 构建信息缺失时,最务实的做法是:先确认 PHP 来源(包管理器安装 / 源码编译 / Docker 镜像),再查对应渠道的构建日志或 Dockerfile










