自学教程

宝塔面板无法切换到 PHP8

问题描述:宝塔 Linux 面板 免费版 V7.1.1,已经安装了 PHP8.2,但在站点中无法切换到 PHP8.2 版本(可选项中没有显示 PHP8.2),该如何解决。

原因

7.1.1 获取PHP下拉列表是硬编码写在Python源码里,内置列表最高只写到81,没有82,哪怕你装上PHP8.2,网页下拉也不会出现。

优先分两条路线:
路线A:直接改站点Nginx配置(推荐,不用修改面板代码,最稳)
路线B:修改面板python源码,让下拉框出现PHP8.2(不推荐,升级面板会失效,有风险)

第一步:先确认PHP8.2是否真的安装成功(必须先做)

SSH执行:

ls /www/server/php/82
ls /etc/init.d/php-fpm-82
ls /tmp/php-cgi-82.sock
  1. /www/server/php/82 文件夹存在
  2. /etc/init.d/php-fpm-82 启动脚本存在
  3. 能看到 /tmp/php-cgi-82.sock 代表php-fpm正常运行

启动php8.2-fpm:

/etc/init.d/php-fpm-82 start

查看运行状态:

/etc/init.d/php-fpm-82 status

如果这里启动失败,那后面全部不用试,先重装PHP8.2,是PHP编译失败。


方案A:直接修改站点Nginx配置【推荐,不用动面板源码】

  1. 宝塔后台 → 网站 → 找到站点 → 配置文件
  2. 找到 location ~ \.php$ 这一段
    替换里面的 fastcgi_pass 为 php8.2 的socket:
location ~ \.php$ {
    fastcgi_pass   unix:/tmp/php-cgi-82.sock;
    fastcgi_index  index.php;
    include        fastcgi.conf;
}
  1. 保存配置,点击【重载Nginx】

⚠️ 缺点:网站设置里PHP下拉仍然不会显示PHP8.2,只是网站实际跑PHP8.2;以后在面板里点“切换PHP版本”会覆盖掉这段配置,需要留意。

测试:在网站根目录新建 phpinfo.php,内容

<?php phpinfo(); ?>

访问域名/phpinfo.php,看页面PHP版本确认是否是8.2。


方案B:修改面板源码,让下拉框出现PHP8.2(可选,有风险)

SSH打开面板站点处理文件:

vi /www/server/panel/class/panelSite.py

搜索关键词 phpVersions,你会看到类似这样的元组:

phpVersions = ('52','53','54','55','56','70','71','72','73','74','80','81')

在末尾加上 '82',修改后:

phpVersions = ('52','53','54','55','56','70','71','72','73','74','80','81','82')

保存退出,重启面板:

bt restart

浏览器 CTRL+F5 强制刷新宝塔页面,再进网站设置 → PHP,下拉就出现PHP8.2了。

⚠️ 风险提醒:

  1. 一旦执行 bt update 升级面板,这个文件会被覆盖,82选项再次消失;
  2. 修改面板源码,小概率造成网站模块报错,修改前建议备份这个文件
cp /www/server/panel/class/panelSite.py /www/server/panel/class/panelSite.py.bak

出问题可以还原:cp /www/server/panel/class/panelSite.py.bak /www/server/panel/class/panelSite.py


根治方案(强烈建议,生产环境优先)

7.1.1版本面板老旧,存在大量安全漏洞,且对PHP8.x系列支持不完善。
服务器先打快照/全量备份网站+数据库,再SSH执行升级命令:

bt update

升级完 bt restart,新版面板原生支持PHP8.2,不需要手动改代码。

排查补充

  1. 如果 /tmp/php-cgi-82.sock 不存在:代表php-fpm82启动失败,看PHP8.2安装日志排查编译错误
  2. 确认你的web服务器是Nginx;如果是Apache,配置方式不一样,需要修改Apache的php-fpm代理配置
  3. 测试phpinfo后出现502:多半php-fpm82没启动,或者socket权限问题

你可以先执行这几条命令,把结果发给我,我帮你判断PHP8.2是否安装完整:

ls /www/server/php/
ps -ef | grep php-fpm
ls /tmp/php-cgi*.sock

0 条笔记