PHP 漏洞 修复与跨版本迁移
先确认当前厂商是否提供 PHP2Shell 回补,再测试从 PHP 8.0 到 8.4 的迁移。回补补丁不会恢复 EOL 分支的上游支持。未经应用和扩展测试,不要直接切换生产环境的大版本或小版本分支。
PHP 8.1 的兼容性变更
以下摘录来自 PHP 官方迁移指南;请继续阅读原文,检查扩展相关变更。
- 变更内容
不再支持对整个 $GLOBALS 数组赋值。
检查代码中的这些用法查找对 $GLOBALS 整个数组的写入。
阅读 PHP 8.1 官方迁移说明 ↗ - 变更内容
必填参数之前的可选参数也被视为必填参数。
检查代码中的这些用法检查默认参数后仍有必填参数的函数签名。
阅读 PHP 8.1 官方迁移说明 ↗ - 变更内容
继承的方法与父方法共享静态变量。
检查代码中的这些用法检查继承方法中的静态变量。
阅读 PHP 8.1 官方迁移说明 ↗
PHP 8.2 的兼容性变更
以下摘录来自 PHP 官方迁移指南;请继续阅读原文,检查扩展相关变更。
- 变更内容
标准字符串函数的大小写转换改为基于 ASCII,不再依赖 locale。
检查代码中的这些用法检查 strtolower()、strtoupper() 和依赖区域设置的比较。
阅读 PHP 8.2 官方迁移说明 ↗ - 变更内容
str_split() 对空字符串返回空数组。
检查代码中的这些用法检查是否假定结果包含一个空元素。
阅读 PHP 8.2 官方迁移说明 ↗ - 变更内容
当 open_basedir 限制所有路径时,glob() 返回空数组。
检查代码中的这些用法检查对 glob() 返回值进行严格 false 比较的代码。
阅读 PHP 8.2 官方迁移说明 ↗
PHP 8.3 的兼容性变更
以下摘录来自 PHP 官方迁移指南;请继续阅读原文,检查扩展相关变更。
- 变更内容
range() 对无效边界类型和步长的校验更严格。
检查代码中的这些用法检查使用对象、数组、零步长或负步长的 range() 调用。
阅读 PHP 8.3 官方迁移说明 ↗ - 变更内容
number_format() 的 decimals 为负数时,在小数点前进行舍入。
检查代码中的这些用法检查 number_format() 的负 decimals 参数。
阅读 PHP 8.3 官方迁移说明 ↗ - 变更内容
日期处理使用更具体的异常与错误类型。
检查代码中的这些用法检查 DateTime 构造及异常处理代码。
阅读 PHP 8.3 官方迁移说明 ↗
PHP 8.4 的兼容性变更
以下摘录来自 PHP 官方迁移指南;请继续阅读原文,检查扩展相关变更。
- 变更内容
exit() 和 die() 使用普通类型转换规则,无效输入可能抛出 TypeError。
检查代码中的这些用法检查传入非字符串、非整数值的调用。
阅读 PHP 8.4 官方迁移说明 ↗ - 变更内容
PHP_DEBUG 和 PHP_ZTS 常量变为布尔值。
检查代码中的这些用法检查这些常量与整数的严格比较。
阅读 PHP 8.4 官方迁移说明 ↗ - 变更内容
round() 遇到无效舍入模式时抛出 ValueError。
检查代码中的这些用法检查自定义或动态选择的舍入模式。
阅读 PHP 8.4 官方迁移说明 ↗
切换 PHP 前的准备
- 备份文件、配置和数据,并验证恢复方法。
- 在测试环境使用目标 PHP 和与生产相同的扩展。
- 核对依赖约束及应用、插件、主题兼容性。
- 测试登录、上传、邮件、定时任务、队列及失败处理。
- 确认目标包包含 PHP 漏洞 修复,且目标分支仍受支持。
PHP 漏洞:选择平台升级步骤
PHP 漏洞 升级后的回滚与恢复
保留明确的软件包或镜像引用及已验证的恢复流程。迁移失败时一致地恢复配置和数据。恢复到有漏洞的运行时会重新引入风险,重新开放网站前要核对厂商公告。
PHP 漏洞 更新后的检查
测试关键请求、登录、上传、日志、定时任务和后台 worker。重启所有处理网站请求的 PHP 进程,并核对每个站点的运行版本。保存软件源和完整修订号记录;EOL 分支还需安排迁移。
版本检查器 →