应先执行php -v和php --ini确认当前PHP主版本及配置路径,再核查CVE-2024-4577、CVE-2023-3823是否影响该版本;若官方支持页标“EOL”或“Security fixes only”则需立即升级。

在 CentOS 上升级 PHP 修复漏洞,核心是**避开系统默认老旧源、精准匹配安全补丁版本、避免扩展 ABI 冲突**。PHP 7.1 及更早版本已停止维护,CVE-2023-3823、CVE-2024-4577 等远程代码执行漏洞必须通过升级到受支持版本(如 PHP 8.1+)来彻底修复,不能仅靠打补丁。
确认当前版本与漏洞影响
先判断风险是否真实存在:
- 运行 php -v 查看主版本(如 7.1.33),再访问 PHP 官方支持周期页,确认该版本是否仍在安全更新范围内(PHP 7.4 已于 2022 年 11 月终止支持)
- 执行 php --ini 找到 php.ini 路径,打开后检查 display_errors = Off 和 disable_functions 是否启用关键防护(如禁用
system、exec) - 查 CVE 对应修复版本:例如 CVE-2024-4577 在 PHP 8.1.29、8.2.20、8.3.8 中修复,低于这些小版本号即存在风险
使用 Remi 仓库安全升级(推荐)
CentOS 7/8 默认 yum 源不提供新版 PHP,直接 yum update php 无效且危险。必须启用 Remi 仓库并严格启用配套依赖源:
- 安装基础依赖:sudo yum install epel-release
- 安装 Remi 源:sudo yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm(CentOS 7)或
remi-release-8.rpm(CentOS 8) - 启用目标版本 + remi-safe(关键!它提供 libgd、libonig 等底层兼容库):
sudo yum-config-manager --enable remi-php81 remi-safe - 卸载已知冲突扩展(必须做):
sudo yum remove php-pecl-apcu-bc php-pecl-mcrypt
(PHP 8.1+ 已移除 mcrypt,改用sodium;apcu-bc 无对应版本) - 安装新版本:sudo yum install php81 php81-php-fpm php81-php-mbstring php81-php-xml php81-php-zip
切换并验证服务
升级后需确保 Web 服务实际调用新版本:
- 如果是 Apache:
确认模块路径(如/opt/remi/php81/root/usr/lib64/httpd/modules/libphp81.so),在/etc/httpd/conf.d/php.conf中指向它,再运行 sudo systemctl restart httpd - 如果是 Nginx + PHP-FPM:
启动新服务:sudo systemctl enable php81-php-fpm && sudo systemctl start php81-php-fpm
修改 Nginx 站点配置中fastcgi_pass指向127.0.0.1:9001(php81 默认端口),再重启 Nginx - 创建
/var/www/html/info.php,内容为,浏览器访问确认显示 PHP 8.1.x 且“Loaded Configuration File”路径正确 - 检查错误日志:sudo tail -f /var/log/php-fpm/www-error.log 或 Apache 的 error_log,确认无模块加载失败报错
回滚与兼容性准备
生产环境务必预留退路:
- 升级前备份:sudo cp -r /etc/opt/remi/php80 /backup/php80-conf-$(date +%s)(按实际旧版本路径调整)
- 若网站报
Function not found,大概率是废弃函数(如mysql_connect)未替换,需用mysqli或PDO重写 - Redis 扩展需同步更换:
php-pecl-redis→php81-php-pecl-redis5(API 不兼容) - 验证后删除 info.php,避免信息泄露
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











