CentOS 7 环境下通过 Yum 源升级 PHP 版本后配置丢失怎么恢复

文章导读
CentOS 7 通过 Yum 升级 PHP 大版本后配置丢失,通常是因为新版本的配置文件路径变更或 RPM 机制生成了 .rpmnew 文件而未自动合并,恢复需手动迁移旧配置或合并 rpmnew 文件。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

CentOS 7 通过 Yum 升级 PHP 大版本后配置丢失,通常是因为新版本的配置文件路径变更或 RPM 机制生成了 .rpmnew 文件而未自动合并,恢复需手动迁移旧配置或合并 rpmnew 文件。

先说结论:配置未真正丢失,而是位于旧路径或备份文件中,需确认新版本的 php.ini 实际加载路径。

  • 适合:通过 remi 或 SCL 源升级 PHP 大版本的场景
  • 先准备:确认旧配置文件备份及新版本配置路径
  • 验收:通过 phpinfo() 核对配置项是否生效

命令速用版

# 查看当前 PHP 加载的配置文件路径
php `--ini`

# 查找可能存在的 rpm 备份文件
find /etc -name "*.rpmnew" -o -name "*.rpmsave"

# 查看 PHP 版本
php -v

# 重启 PHP 服务 (根据实际环境选择)
systemctl restart php-fpm
systemctl restart httpd

为什么会这样

Yum 升级 PHP 大版本时,新版本往往作为独立包安装,配置文件路径可能发生变化。

RPM 包管理机制在检测到配置文件被修改时,不会直接覆盖,而是生成 .rpmnew 后缀的新配置模板,导致旧配置未自动应用。CentOS 7 默认源 PHP 版本较老,用户常切换至 remi 等第三方源,不同源的包结构差异也会导致配置目录不一致,例如从 /etc/php.ini 变为 /etc/opt/remi/php74/php.ini。

分步处理

步骤 1:确认新配置文件路径

执行 php `--ini` 查看 Loaded Configuration File 指向的具体文件。

如果路径指向新目录,检查该文件是否存在且大小正常。

步骤 2:查找旧配置或备份

检查 /etc 目录下是否有 php.ini.rpmsave 或 php.ini.rpmnew。

如果有 php.ini.rpmsave,说明这是升级前的旧配置,可对比后合并。

CentOS 7 环境下通过 Yum 源升级 PHP 版本后配置丢失怎么恢复

如果有 php.ini.rpmnew,说明这是新版本默认配置,需将旧配置项填入。

步骤 3:手动迁移配置

不要直接覆盖新文件,建议使用 diff 工具对比差异。

将旧配置中的 extension、memory_limit、upload_max_filesize 等关键项复制到新配置文件。

注意扩展名称在不同 PHP 版本间可能变化,如 mysql 扩展在 PHP 7 中变为 mysqli 或 pdo_mysql。

步骤 4:重启服务

修改配置后必须重启 PHP-FPM 或 Web 服务器才能生效。

执行 systemctl restart php-fpm 或 systemctl restart httpd。

怎么验证是否生效

创建 phpinfo.php 文件,写入 <?php phpinfo(); ?>,通过浏览器访问。

核对 Core 部分的 Configuration File (php.ini) Path 是否为预期路径。

CentOS 7 环境下通过 Yum 源升级 PHP 版本后配置丢失怎么恢复

搜索之前修改的配置项,如 memory_limit,确认值已更新。

在命令行执行 php -m 检查必需扩展是否已加载。

常见坑

扩展丢失:升级后扩展需重新安装,yum 包名可能变化,如 php-mysql 变为 php74-php-mysqlnd。

权限问题:新配置目录或 session 目录权限可能未正确设置,导致写入失败。

多版本共存:若使用 SCL 源,需通过 scl enable 命令激活环境,否则命令行与 Web 环境版本不一致。

CentOS 7 源失效:CentOS 7 已于 2024 年 6 月 30 日停止维护,默认 yum 源可能无法访问,需切换至 vault.centos.org。

常见问题

升级后 php -v 和网页显示版本不一致怎么办

命令行与 Web 服务调用的 PHP 路径不同,检查 Web 服务器配置中指定的 PHP 处理模块路径。

找不到 php.ini 文件在哪里

执行 php `--ini` 命令,查看 Loaded Configuration File 字段显示的路径。

配置修改后重启服务无效

确认修改的是 php `--ini` 显示的实际加载文件,而非其他备用路径,并检查是否有 opcache 缓存干扰。

参考来源

  • CentOS Wiki, "CentOS-7", https://wiki.centos.org/Manuals/ReleaseNotes/CentOS7
  • PHP Manual, "Configuration File (php.ini)", https://www.php.net/manual/en/configuration.file.php
  • Remi Repository, "PHP Versions", https://rpms.remirepo.net/