PHP CLI 与 FPM 版本不同本质是两个独立进程:CLI 依赖 shell PATH 查找 php 二进制,FPM 由 Web 服务器配置(如 fastcgi_pass)及自身启动脚本决定,二者路径、配置、环境变量均不共享。

php -v 和 phpinfo() 显示版本不同,本质是两个进程加载了不同二进制文件
CLI(php -v)调用的是 shell 当前 PATH 中第一个 php 可执行文件;FPM(phpinfo())依赖的是 Web 服务器配置中 fastcgi_pass 指向的 php-fpm 进程,而该进程又由它自己的启动脚本、systemd unit 或宝塔面板绑定的二进制路径决定。两者完全独立,不共享环境变量,也不自动同步。
检查 CLI 实际调用的 PHP 路径和配置
别只信 php -v,得确认它到底跑的是谁:
-
which php—— 看当前 shell 找到的php在哪 -
php --ini—— 查看 CLI 加载的php.ini路径,通常和二进制同级或在其etc/目录下 -
readlink -f $(which php)—— 如果是软链接,展开看真实路径 - 检查
~/.bash_profile、~/.zshrc或/etc/profile里有没有重复或冲突的export PATH=...
检查 FPM 实际运行的版本和配置来源
FPM 不读你终端的 PATH,它靠的是启动命令或服务定义:
- Nginx 配置里找
fastcgi_pass,例如unix:/run/php/php82-fpm.sock或127.0.0.1:9082,这个后缀(php82)往往就对应版本 - 查该 FPM 进程用的二进制:
ps aux | grep php-fpm,看主进程命令行是否含完整路径,如/www/server/php/82/sbin/php-fpm - 进对应站点的
phpinfo()页面,看 “Loaded Configuration File” 是不是/www/server/php/82/etc/php.ini这类路径 - 如果是宝塔,直接去「网站 → 对应站点 → PHP版本 → 设置」里看「PHP-FPM设置」中是否显式绑定了
PATH和LD_LIBRARY_PATH
PATH 冲突最常被忽略的三个位置
改了 PATH 却没生效?大概率栽在这三处:
立即学习“PHP免费学习笔记(深入)”;
-
/usr/bin/php是个软链接,宝塔默认指向最新版,但系统其他服务(如 cron、shell 脚本)可能直接调用它,而不是走PATH——ls -l /usr/bin/php看一眼,必要时rm -f /usr/bin/php - Mac 上 Homebrew 安装多个 PHP(如
php@8.1、php@8.2),php-fpm默认不在bin/下,而在sbin/,光加bin到PATH没用,必须也加sbin - Docker 或 systemd 启动的 FPM,完全不读用户 shell 的
PATH,得在docker run -e PATH=...或Environment=PATH=...中单独声明
php -v、php --ini、phpinfo() 和 ps aux | grep php-fpm 四个输出,缺一不可。



















