为出海而探索,为选择多想一步。CROSSBORDER GEEK / K8N.COM
K8N跨境极客CrossBorder Geek

教程

php2shell 一键修复:五大环境升级 PHP 安全版本命令行合集

先说结论

终端一键修复示意 AI 操作示意图·以官网实际界面为准

不同环境,修复入口完全不同——apt/dnf 只更新发行版仓库里的 PHP,宝塔、aaPanel 这类面板自编译的 PHP 它管不到。先分清你的 PHP 是谁装的,再选下面的命令。

环境 A:Debian / Ubuntu(apt)

Debian 已发布安全通告 DSA-6574-1(Debian 13)与 DLA-4848-1(Debian 12),Ubuntu 走 Ubuntu 安全源。一键升级:

sudo apt update && sudo apt install --only-upgrade php* -y

升级后验证:php -v 必须显示修复版本号或更高;再 sudo systemctl restart php*-fpm 重启服务。

环境 B:RHEL / CentOS / AlmaLinux / Rocky(dnf/yum)

AlmaLinux 已于 10 月 21 日推送修复包,RHEL 8/9/10 于 10 月 23 日发布更新;使用 Remi 源的,PHP 8.3.36 等修复 RPM 已上 remi-modular 仓库(支持 EL8+ 与 Fedora)。升级:

sudo dnf -y update php*        # RHEL9+/Fedora
sudo yum -y update php*        # CentOS 7/8

若用 Remi 源装过 PHP,先 sudo dnf module reset php -y 再 sudo dnf -y update php*,按 Remi 仓库公告操作。

环境 C:宝塔 / aaPanel 等面板(重点)

面板自编译的 PHP 不走系统仓库——apt upgrade 不会更新它。正确路径是面板内升级:

  1. 登录面板,进入「软件商店 → PHP」,查看当前版本;
  2. 在站点列表逐个确认每个网站连接的 PHP 版本(只更新默认版本,仍连着旧 PHP-FPM 的站点照样中招);
  3. 面板内一键升级/切换版本到 8.2.35+ / 8.3.36+ / 8.4.27+ / 8.5.12;
  4. 升级后重启 PHP 服务,逐站验证。

环境 D:源码编译(自维护服务器)

PHP 8.1 及更早已官方 EOL,PHP 项目为 7.4/8.0/8.1 提供了最小源码 backport。自编译用户到 php.net 下载页取对应版本源码包,编译安装:

wget https://www.php.net/distributions/php-8.4.27.tar.gz
tar -xzf php-8.4.27.tar.gz && cd php-8.4.27
./configure --prefix=/usr/local/php84 --with-config-file-path=/usr/local/php84/etc [原编译参数]
make -j$(nproc) && sudo make install

编译前备份 php.ini 与 FPM 配置;用你原来的 configure 参数,别丢扩展。

环境 E:Windows / XAMPP

多环境修复路径示意 AI 操作示意图·以官网实际界面为准

到 php.net 下载页取 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35 的 Windows 二进制(VC17 x64 等),停掉服务 → 备份原目录 → 解压覆盖 → 重启,php -v 验证。XAMPP 等集成环境在其控制面板里升级 PHP 模块。

一键修复脚本(自动检测环境)

以下脚本帮你自动完成"检测系统 → 备份提示 → 升级 → 验证",先看注释再运行:

#!/usr/bin/env bash
# php2shell 一键修复助手 —— 仅适用于发行版系统仓库安装的 PHP
# 面板环境(宝塔/aaPanel)请走面板升级,勿运行本脚本
set -euo pipefail

echo "[1/5] 检测当前 PHP 版本"
php -v | head -1 || echo "未找到 php 命令,请先确认 PHP 安装方式"

echo "[2/5] 检测操作系统"
. /etc/os-release
echo "OS: ${PRETTY_NAME:-$ID}"

echo "[3/5] 执行升级(发行版仓库)"
if command -v apt-get >/dev/null 2>&1; then
  sudo apt-get update && sudo apt-get install --only-upgrade php* -y
elif command -v dnf >/dev/null 2>&1; then
  sudo dnf -y update php*
elif command -v yum >/dev/null 2>&1; then
  sudo yum -y update php*
else
  echo "未识别到 apt/dnf/yum,请改用面板或源码方式升级"; exit 1
fi

echo "[4/5] 验证版本(需 ≥ 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12)"
php -v | head -1

echo "[5/5] 重启 PHP 服务"
sudo systemctl restart $(systemctl list-units --type=service --all | grep -o 'php[0-9.]*-fpm' | sort -u | tr '\n' ' ') 2>/dev/null || true
echo "完成。请逐站验证业务页面。"

升级前的临时缓解速查

机房终端运维实拍

无法立即升级时,先按官方建议降低攻击面(不能替代升级):

  • php.ini:session.upload_progress.enabled = 0,重启所有 worker;PHP 8.5 再加 fatal_error_backtraces = 0
  • FPM pool / Apache 配置:php_admin_value[memory_limit] = -1(防应用覆盖)
  • post_max_size:不需要上传设 8M,需要上传设 32M,且 upload_max_filesize 小于它

官方资料

资料核对日期:2026-10-25

最近一周热门文章

按近 7 天访问热度排序,热度积累前优先展示新文章。

当前栏目最新文章

教程 · 继续阅读同栏目的新内容

一起交流

0 条留言

还没有留言,来分享你的想法吧。

LEAVE A NOTE

你的经验,也很重要。

无需注册或登录。请勿公开邮箱密码、证件、银行卡号或其他敏感信息。

更多阅读
K8N · CrossBorder Geek

给出海玩家、独立开发者、跨境博主与外贸人的选型笔记。

关于这个博客 ↗