PHP 8.5.5 可与其他 PHP 版本共存,但 CLI 与 Web 必须分离:phpenv 管理 CLI(通过 .php-version 文件),Nginx + PHP-FPM 管理 Web(需手动配置 fastcgi_pass 指向 9005 等独占端口),二者互不感知;混用将导致 502 错误或版本错乱。

PHP 8.5.5 可以和其他 PHP 版本(如 7.4、8.1、8.2)共存,但必须明确区分 CLI 和 Web 两套路径——phpenv 管 CLI,Nginx + PHP-FPM 管 Web,二者互不感知,混用就会 502 或版本错乱。
PHP 8.5.5 的 CLI 多版本切换:用 phpenv 而不是 update-alternatives
如果你只是想让 php -v 在不同项目里返回 8.5.5 或其他版本,phpenv 是更干净的选择。它不改系统软链,也不动 /usr/bin/php,只靠目录级 .php-version 文件生效。
-
phpenv install 8.5.5会编译安装到~/.phpenv/versions/8.5.5/,全程隔离 - 进项目根目录执行
phpenv local 8.5.5,生成.php-version文件,下次cd进来自动生效 -
which php必须指向~/.phpenv/versions/8.5.5/bin/php才算成功;如果还是/usr/bin/php,说明没加载 shims(检查~/.phpenv/bin/phpenv init是否已写入 shell 配置) - 别指望
phpenv global 8.5.5让 Nginx 也走这个版本——它对 Web 完全无效
Nginx 绑定 PHP 8.5.5-FPM:必须手动指定 fastcgi_pass
宝塔面板或纯 Nginx 都不识别“PHP 8.5.5”这个名称,只认具体的 fastcgi_pass 地址。你得先确保 PHP 8.5.5 的 FPM 实例在跑,且监听地址不与其他版本冲突。
- 确认 PHP 8.5.5-FPM 已启动:
ps aux | grep php-fpm看是否有~/.phpenv/versions/8.5.5/sbin/php-fpm进程 - 检查其配置:
~/.phpenv/versions/8.5.5/etc/php-fpm.d/www.conf中listen = 127.0.0.1:9005(推荐端口模式,避开 socket 权限问题) - 在 Nginx 的
location ~ \.php$块里硬写:fastcgi_pass 127.0.0.1:9005;—— 宝塔界面不支持按路径绑定 PHP 版本,必须手改配置文件 - 务必重载 Nginx:
nginx -t && systemctl reload nginx,只点「保存」不生效
phpMyAdmin 多版本共存时,PHP 8.5.5 实例的 Session 隔离陷阱
如果你把 phpMyAdmin v5.2 部署在 /pma-v5/ 下并用 PHP 8.5.5 支持,而旁边还有 v4.9 用 PHP 8.1,那两个实例会互相踢登录——根本原因是 session cookie 路径没拆开。
立即学习“PHP免费学习笔记(深入)”;
- 每个 phpMyAdmin 实例的
config.inc.php里必须设:$cfg['SessionPath'] = '/pma-v5/';(不能以/结尾) - Nginx 配置中对应
location ^~ /pma-v5/块内,加一行:fastcgi_param PHP_VALUE "session.cookie_path=/pma-v5/"; -
blowfish_secret必须为每个实例生成独立值,否则加密数据可能被另一个版本误读 - 注意 location 顺序:
^~ /pma-v5/块必须放在所有泛匹配location ~ \.php$之前,否则/pma-v5/index.php会被当成根目录 PHP 执行,$_SERVER['SCRIPT_NAME']变成/index.php,路由全崩
最常被忽略的点是:PHP 8.5.5 的 FPM 默认以当前用户身份运行,而 Nginx worker 进程通常是 www-data 或 www 用户。如果权限没对齐(比如 socket 文件不可读、或端口被防火墙拦截),502 就静默出现,日志里只写“connect() failed”。先验证 curl -v http://127.0.0.1:9005 能否通,再查 Nginx error.log。



















