PHP8.2.10 编译升级 PHP8.2.35 完整实操文档(修复PHP2Shell高危漏洞)
PHP8.2.10 编译升级 PHP8.2.35 完整实操文档(修复PHP2Shell高危漏洞)
一、升级背景
服务器原有编译版本:PHP 8.2.10
存在高危漏洞:PHP2Shell(CVE-2026-109618 / CVE-2026-109619)远程代码执行漏洞
修复目标版本:PHP 8.2.35(8.2分支最终安全修复版)
升级方式:原地编译覆盖升级(不新增环境、不改动Nginx配置、不改动FPM配置)
二、环境信息
PHP安装路径:
/usr/local/php82运行用户:www
运行模式:PHP-FPM 监听 127.0.0.1:9000
管理方式:systemctl 托管 php-fpm.service
Web服务:Nginx
三、升级前备份(关键兜底)
升级前备份整套旧PHP环境,出问题可秒回滚
cp -r /usr/local/php82 /usr/local/php82.bak.8.2.10
四、获取旧版本完整编译参数(重中之重)
避免升级后模块缺失、参数不一致、服务异常
/usr/local/php82/bin/php-config --configure-options
将输出的完整 configure 参数保存,后续新版本编译必须完全一致。
五、下载新版源码并解压
cd /usr/local/src
wget https://www.php.net/distributions/php-8.2.35.tar.gz
tar -zxvf php-8.2.35.tar.gz
cd php-8.2.35
六、编译配置(完全复用旧参数)
粘贴前面获取的完整 configure 命令,示例格式:
./configure \
--prefix=/usr/local/php82 \
--with-fpm-user=www \
--with-fpm-group=www \
--enable-fpm \
--enable-cli \
--enable-cgi \
--with-openssl \
--with-curl \
--with-zip \
--with-gd \
--with-jpeg \
--with-png \
--with-freetype \
--enable-mbstring \
--enable-intl \
--enable-bcmath \
--enable-pdo \
--with-pdo-mysql \
--with-mysqli \
--enable-sockets \
--enable-opcache \
--with-readline \
--without-pear
七、编译 & 安装
make -j$(nproc)
make install
八、本次升级遇到的核心问题 & 解决方案(重点记录)
问题现象
make 编译成功,但 make install 未正常覆盖 php-fpm 主程序
报错:/usr/local/php82/sbin/php-fpm: No such file or directory
导致 systemctl 无法启动 php-fpm
原因
PHP源码编译后,fpm 二进制文件路径不在根目录sbin,而是在:sapi/fpm/php-fpm
部分环境 make install 不会自动覆盖,导致新版程序未部署。
手动修复方案(本次成功方案)
# 进入源码目录手动拷贝新版php-fpm到正式目录
cp sapi/fpm/php-fpm /usr/local/php82/sbin/
chmod +x /usr/local/php82/sbin/php-fpm
九、验证新版程序
/usr/local/php82/sbin/php-fpm -v
输出 PHP 8.2.35 即为编译成功。
十、测试FPM配置是否正常
/usr/local/php82/sbin/php-fpm -t
显示:test is successful 代表配置无问题
十一、重启服务并校验运行状态
systemctl restart php-fpm
systemctl status php-fpm
十二、校验端口监听 & 运行程序版本
ss -tulnp | grep 9000
确认 9000 端口由 php-fpm 监听
ls -l /proc/对应PID/exe
确认运行的是 /usr/local/php82/sbin/php-fpm 新版程序
额外通过进程命令核查运行状态,区分主进程与工作进程,确认无多余旧进程残留:
ps aux | grep php-fpm
正常输出说明:
唯一一条带 master process:PHP-FPM主进程(root用户运行,核心管控进程)
多条带 pool www:PHP-FPM工作子进程(www用户运行,负责处理业务请求)
无多余master主进程,代表无新旧版本进程冲突、升级干净
十三、网页端验证版本(必须清缓存)
1. 新建或访问 info.php
2. 浏览器 Ctrl+F5 强制刷新 / 无痕窗口打开
3. 页面显示 PHP 8.2.35 升级完成,漏洞修复
十四、本次踩坑总结(可永久参考)
PHP升级后网页显示旧版 = fpm进程未重启或浏览器缓存
重启报错找不到文件 =make install 未覆盖 fpm 二进制,需手动拷贝 sapi/fpm/php-fpm
升级必须沿用旧configure参数,否则扩展、模块全部异常
升级前必须备份整套PHP目录,方便秒回滚
十五、漏洞修复结论
当前服务器 PHP 已升级至 8.2.35,已彻底修复:
CVE-2026-109618 / CVE-2026-109619 PHP2Shell 远程代码执行高危漏洞
业务运行正常、Nginx对接正常、FPM进程稳定。
本作品采用《CC 协议》,转载必须注明作者和本文链接
关于 LearnKu
推荐文章: