Appearance
PHP 安全升级指南(2026)
适用于本地部署、自行运维服务器的 EduSoho 客户,操作前请安排业务低峰期。
选择升级方式
| 部署方式 | 升级方式 |
|---|---|
| Ubuntu 22.04 / 24.04,使用 apt 安装 PHP | PPA 原地升级 |
| 其他系统,直接安装 PHP | 迁移到 Docker |
| 已使用 Docker | 重建 PHP 镜像 |
| 宝塔面板 | 按宝塔专项说明操作 |
先查看当前版本,以下命令以 PHP 7.2、网站目录 /var/www/edusoho 为例,按实际情况替换:
bash
php -v
php-fpm7.2 -vEduSoho 教培版升级到 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.bakDocker、宝塔部署请改为实际配置目录;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-fpmDocker 部署检查容器内 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 fpmPPA 原地升级、宝塔部署回滚请联系 EduSoho 技术支持,附上 PHP 包版本和 Nginx / PHP-FPM 错误日志;回滚到未修复版本后须继续采取临时缓解措施。