PHP 版本和扩展怎么查?命令行与网站运行环境不一致排查

PHP 项目部署时,终端里的 php 和网站使用的 PHP-FPM 不一定来自同一版本。Composer 检查通过而网页失败,或扩展安装后仍报缺失,都可能由这类差异引起。本文以 Ubuntu 24.04 常见 PHP 8.3 安装为例,先查实际环境,再决定是否安装或启用模块。

先记录命令行正在使用什么

在负责部署的账号下执行只读检查:

command -v php
php -v
php --ini
php -m
php --ri pdo_mysql

这些结果分别帮助确认可执行文件、版本、配置位置、模块列表和指定扩展信息。最后一条在扩展不存在时可能提示未找到,这是排查结果,不应直接忽略。PHP 命令行参数的含义可查官方命令行选项

如果服务器上有多个版本,记录完整路径。交互终端、定时任务和服务进程的 PATH 可能不同,不能仅凭某次手工运行结果认定所有环境一致。后续部署命令应明确使用预期解释器。

再查网站真正连接的 FPM

检查目标 Nginx 站点中的 FastCGI 地址,确认它指向哪个 socket 或 TCP 端口,再对应到实际 FPM 服务和进程池。修改了 PHP 8.3 的文件,而站点仍连接另一版本的池,当然不会看到预期变化。

FPM 与 CLI 可以加载不同的 php.ini 和扩展配置目录,进程池还可能覆盖某些设置。先核对加载位置和服务版本,再检查扩展文件是否属于同一套安装。不要把不同仓库、不同大版本的二进制模块直接复制到一起使用。

池配置的作用范围与加载方式可参考PHP-FPM 官方说明。共享服务器还要确认哪个池服务哪个站点,避免一次全局修改影响其他项目。

通过受控请求验证必要信息

需要从 Web 环境确认时,优先使用应用自带的管理员诊断功能,并限制访问来源。若临时编写诊断页面,只输出判断所需的版本、运行接口和特定扩展是否加载,不要向公众展示完整 phpinfo 或环境变量。

例如应用可以读取 PHP_VERSIONPHP_SAPI,并用 extension_loaded('pdo_mysql') 判断目标扩展。该函数检查当前执行环境,不会替其他 PHP 进程证明结果。PHP extension_loaded 文档

检查结束后撤除临时诊断入口,并从外部确认它不可访问。访问控制应由真实认证或网络限制实现,不能只依赖一个难猜的文件名,也不能把输出截图连同敏感配置公开分享。

根据证据选择安装或启用方式

如果扩展未安装,通过当前 PHP 安装来源认可的软件包或构建流程补齐;如果已经安装但未加载,检查对应配置和启动日志。模块名字、软件包名字和应用要求未必完全相同,应对照应用锁定版本的环境要求。

安装前核对兼容性与是否会连带切换 PHP 主版本,不要看到提示缺模块就同意所有替换。生产站点更改扩展后可能需要重新加载实际 FPM 服务;仅重新打开终端不会改变长期运行的网站进程。

验证真实功能,再清理临时变更

扩展显示已加载只是第一步。例如数据库驱动存在,还需验证连接、字符集和应用查询;图片扩展存在,还需验证实际格式处理。使用测试账号和可控样本,检查原来失败的业务路径以及错误日志。

保留原软件包版本、配置备份和站点使用的 FPM 入口。若新模块引入启动错误,按已确认的方式恢复配置或环境,不要直接卸载整套 PHP。交付时记录 CLI、FPM 和定时任务各自的解释器路径,后续升级才能按同一张清单核对。

参考资料

继续阅读

返回天理云文章中心

分享到:
上一篇
PHP-FPM 进程池怎么设?并发上限、内存与排队分析
下一篇
Composer 生产部署怎么做?锁文件、平台要求与依赖安装
服务中心
企微客服
企微客服
给您高效服务
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意