宝塔不会自动按需切换PHP版本,每个网站需手动指定并重载配置;CLI命令、OPcache、扩展均独立于网站设置,须同步调整三链路。

网站绑定哪个PHP版本,就用哪个版本
宝塔不会自动按需切换PHP版本——每个站点必须手动指定。你装了7.4、8.1、8.3,不代表访问时会“智能选”,默认全走面板设置的主版本(通常是最后安装的那个)。
- 进「网站」→ 点击目标站点「设置」→ 在「PHP版本」下拉菜单里选好(比如
8.1),点保存 - 保存后务必点右上角「重载配置」,否则Nginx不读新设置,请求仍打到旧
php-fpm进程 - 如果页面报
502 Bad Gateway,大概率是php-fpm-81没启动:去「软件管理」里找对应PHP版本,点「启动」 - 不同版本的
php.ini完全独立,路径如/www/server/php/81/etc/php.ini,改错地方等于白改
终端执行PHP命令,默认不随网站走
你在SSH里敲php -v或php composer.phar install,调用的是系统级软链,和网站用的PHP版本无关。它通常指向/usr/bin/php → /www/server/php/80/bin/php这类主版本。
- 临时切版本:直接用绝对路径,比如
/www/server/php/74/bin/php composer.phar install - 加别名更省事:
alias php74='/www/server/php/74/bin/php',但别改/usr/bin/php软链,容易崩掉面板后台任务 -
composer install对PHP版本敏感,用错版本可能报Your requirements could not be resolved,务必确认php命令实际指向哪个版本
OPcache缓存不清理,换版本也像没换
切换PHP版本后访问页面,phpinfo()显示还是旧版本?或者行为没变?不是绑定失败,很可能是OPcache还在用老版本编译的opcode。
- 进「PHP管理」→ 找到刚切换的版本(比如
8.1)→ 点「设置」→ 拉到底点「清除OPcache缓存」 - 也可以手动重启对应服务:
service php-fpm-81 restart,比清缓存更彻底 - 伪静态规则(尤其是ThinkPHP/Laravel的
try_files写法)有时会绕过PHP-FPM,导致看似“没生效”,建议先用干净index.php测试
多个PHP-FPM进程互相不干扰,但端口/sock别撞车
宝塔为每个PHP版本启一个独立php-fpm服务,进程名带版本号(如php-fpm-74),监听方式默认是socket(如/tmp/php-cgi-74.sock),极少冲突。
立即学习“PHP免费学习笔记(深入)”;
- 除非你手动改过配置,否则不用管端口或socket路径;但若自己编译过PHP,得确认
listen =指向唯一路径,避免两个版本写同一个sock文件 - 查是否真在运行:
ps aux | grep php-fpm,能看到php-fpm: master process (/www/server/php/74/etc/php-fpm.conf)这类明确标识 - 不同版本扩展不通用,比如
redis.so要分别在/www/server/php/74/lib/php/extensions/和/www/server/php/81/lib/php/extensions/里各自编译启用











