Skip to content

PHP 安全升级指南(2026) ​

适用于本地部署、自行运维服务器的 EduSoho 客户,操作前请安排业务低峰期。

选择升级方式 ​

部署方式升级方式
Ubuntu 22.04 / 24.04,使用 apt 安装 PHPPPA 原地升级
其他系统,直接安装 PHP迁移到 Docker
已使用 Docker重建 PHP 镜像
宝塔面板按宝塔专项说明操作

先查看当前版本,以下命令以 PHP 7.2、网站目录 /var/www/edusoho 为例,按实际情况替换:

bash
php -v
php-fpm7.2 -v

EduSoho 教培版升级到 8.6.14 后支持 PHP 7.4;升级 PHP 大版本前,先升级 EduSoho 并确认网站正常。

PHP 7.x 已停止官方维护,本次修复须核对软件源的回补记录,不能仅凭 php -v 判断;详见 PHP 官方安全公告。

临时缓解 ​

暂时无法升级时,先按临时缓解说明处理,备份配置、重启 PHP-FPM 并检查网站,随后尽快升级。

升级前备份 ​

备份数据库、网站目录、PHP / Nginx 配置和定时任务:

bash
mysqldump -u root -p --single-transaction --routines edusoho > ~/edusoho-$(date +%F).sql
sudo tar czf ~/edusoho-code-$(date +%F).tgz /var/www/edusoho
sudo tar czf ~/php-nginx-conf-$(date +%F).tgz /etc/php /etc/nginx
sudo crontab -u www-data -l > ~/crontab-www-data.bak
sudo crontab -l > ~/crontab-root.bak

Docker、宝塔部署请改为实际配置目录;Docker 还需备份构建文件、Compose 文件、挂载的配置和定时任务目录,并保留旧镜像。

若提示用户没有 crontab,记录为无任务,不要把空文件作为回滚备份。

PPA 原地升级 ​

Ubuntu 22.04 / 24.04 使用 Ondřej Surý PPA 更新当前 PHP 分支:

bash
sudo apt-get install -y software-properties-common
sudo LC_ALL=C.UTF-8 add-apt-repository -y ppa:ondrej/php
sudo apt-get update
apt-cache policy php7.2-fpm
apt changelog php7.2-fpm

确认候选包已包含 CVE-2026-109618、CVE-2026-109619 修复后再升级;未提供修复包时,联系技术支持确认可用方案。

bash
sudo apt-get install --only-upgrade 'php7.2*'
sudo php-fpm7.2 -t
sudo systemctl restart php7.2-fpm

国内访问 PPA 可能较慢,必要时配置代理。

迁移到 Docker ​

按 Ubuntu 安装 PHP 的 Docker 步骤创建部署目录、入口脚本、Dockerfile、配置文件和 Compose 文件,原 PHP-FPM 先保留。

构建后先核对镜像中的包版本和修复记录:

bash
sudo docker run --rm --entrypoint dpkg-query edusoho/php:7.2 -W php7.2-fpm
sudo docker run --rm --entrypoint zcat edusoho/php:7.2 /usr/share/doc/php7.2-fpm/changelog.Debian.gz

确认包含本次修复后,将新 PHP-FPM 端口改为 9072,避免与原服务冲突:

bash
cd /opt/php-7.2
sed -i -E 's|^[[:space:]]*listen[[:space:]]*=.*|listen = 127.0.0.1:9072|' conf/www.conf

对照原配置调整 conf/www.conf 的进程数及 conf/php.ini 的上传、内存和执行时间限制。

网站目录须与 Nginx 使用相同绝对路径;数据库和 Redis 若使用宿主机 Unix Socket,改用已启用的 127.0.0.1 TCP 连接或挂载对应 Socket 目录。

容器中 PHP 以 www-data(UID 33)运行,需要写入的 app/cache、app/data、app/logs、web/files 须允许该用户写入,变更前记录原属主和权限。

启动并检查 PHP-FPM:

bash
sudo docker compose up -d
sudo docker compose exec fpm php-fpm -t
sudo docker compose logs fpm

将该站点 Nginx 配置中的所有 fastcgi_pass 改为:

nginx
fastcgi_pass 127.0.0.1:9072;

检查配置并重载:

bash
sudo nginx -t && sudo nginx -s reload

迁移定时任务 ​

编辑宿主机 crontab,仅删除当前站点的 util:scheduler、queue:work 任务,保留其他任务:

bash
sudo crontab -u www-data -e
sudo crontab -e

进入管理后台 /admin/v2/crontab 点击「重新初始化」,将定时任务注册到容器;仅在启用相应队列功能时迁移该站点队列任务。

检查容器内任务,并在几分钟后确认后台有新的执行记录:

bash
cd /opt/php-7.2
sudo docker compose exec fpm crontab -u www-data -l

停止原 PHP-FPM ​

完成下方验证,确认没有其他站点使用旧服务后再停用:

bash
sudo systemctl disable --now php7.2-fpm

以后执行 EduSoho PHP 命令,先进入容器:

bash
cd /opt/php-7.2
sudo docker compose exec -u www-data fpm bash
cd /var/www/edusoho

重建 PHP 镜像 ​

官方 php:7.x-fpm 镜像已停止维护,请改用上方 Ubuntu + PPA 方案,并按新镜像调整 PHP 配置挂载路径、入口脚本及定时任务。

已使用 Ubuntu + PPA 的镜像,在原构建目录操作,镜像名和服务名按实际替换:

bash
sudo docker image tag edusoho/php:7.2 edusoho/php:7.2-before-security-2026
sudo docker build --pull --no-cache -t edusoho/php:7.2 .
sudo docker run --rm --entrypoint dpkg-query edusoho/php:7.2 -W php7.2-fpm
sudo docker run --rm --entrypoint zcat edusoho/php:7.2 /usr/share/doc/php7.2-fpm/changelog.Debian.gz

确认包已包含本次修复后,重建容器并检查配置:

bash
sudo docker compose up -d --force-recreate fpm
sudo docker compose exec fpm php-fpm -t
sudo docker compose logs fpm

验证 ​

直接部署检查实际使用的 PHP-FPM 和安装包版本:

bash
php-fpm7.2 -v
dpkg-query -W php7.2-fpm

Docker 部署检查容器内 PHP-FPM 和扩展:

bash
cd /opt/php-7.2
sudo docker compose exec fpm php-fpm -v
sudo docker compose exec fpm php -m

确认 Nginx 指向新 PHP-FPM,包版本与修复记录一致,再检查以下功能:

  • 前台首页、课程页、登录正常。
  • 后台登录、图片和附件上传正常。
  • 定时任务有新的执行记录,启用队列的站点还需检查队列消费。
  • 视频、直播等业务功能正常,Nginx / PHP-FPM 日志无新增异常。

回滚 ​

从 Docker 迁移回原服务 ​

先停容器避免重复执行定时任务,再启动原 PHP-FPM:

bash
cd /opt/php-7.2
sudo docker compose stop fpm
sudo systemctl enable --now php7.2-fpm

将 Nginx fastcgi_pass 恢复为原值;如改过目录权限,一并恢复原属主和权限,然后重载 Nginx:

bash
sudo nginx -t && sudo nginx -s reload

从备份中恢复该站点的定时任务,保留备份后新增的其他任务,并确认后台出现新的执行记录。

恢复原 Docker 镜像 ​

将 Compose 的镜像改为 edusoho/php:7.2-before-security-2026,恢复原配置后重建容器:

bash
sudo docker compose up -d --force-recreate fpm

PPA 原地升级、宝塔部署回滚请联系 EduSoho 技术支持,附上 PHP 包版本和 Nginx / PHP-FPM 错误日志;回滚到未修复版本后须继续采取临时缓解措施。

参考:EduSoho PHP 安全升级指南(2026-10-22)。