CentOS 8 中需通过 Remi 仓库安装 PHP 7.4,因 AppStream 仅提供默认的 php:7.2 模块流;必须先执行 dnf module reset php,再启用 php:remi-7.4 并显式安装各组件,最后锁定流以防升级至 8.x。

CentOS 8 的 AppStream 仓库**不提供 PHP 7.4**,官方只预置了 php:7.2 模块。想装 PHP 7.4,必须用 Remi 仓库提供的 php:remi-7.4 模块流——这不是“绕过官方源”,而是 CentOS 8 模块化设计的正常路径。
为什么 dnf install php 总是装到 7.2?
因为 php:7.2 是 AppStream 中唯一被标记为 [d](default)和 [e](enabled)的模块流。即使你没手动启用,dnf 也会默认选它。
-
dnf module list php输出里,php:7.2行带[d][e],而php:remi-7.4只有[x](disabled) - 直接
dnf install php不会自动跨仓库找版本,它只在当前启用的流里拉包 - AppStream 本身没有
php:7.4这个流,Remi 的流名是php:remi-7.4,命名不同,不能混用
dnf module enable php:remi-7.4 前必须 dnf module reset php
重置不是可选项,是防止模块状态冲突的必要操作。如果之前启用了 php:7.2 或其他流,enable 会静默失败或行为异常。
-
dnf module reset php会把所有 php 相关流恢复到初始未启用状态 - 紧接着运行
dnf module enable php:remi-7.4,才能让remi-7.4成为当前激活流 - 漏掉
reset,有时enable看似成功,但dnf install php仍拉的是 7.2 的包
安装时别只装 php,要明确指定 Remi 流依赖
单纯 dnf install php 在启用 php:remi-7.4 后通常能工作,但存在两个隐患:一是某些扩展(如 php-mysqlnd)可能仍从 7.2 流安装;二是若系统缓存未更新,可能回退到旧流。
- 推荐写全命令:
dnf install php:remi-7.4 php-fpm:remi-7.4 php-mysqlnd:remi-7.4 php-gd:remi-7.4 - 这样强制所有包都走同一模块流,避免混合版本引发的 ABI 不兼容(比如
php7.4 调用php-mysqlnd7.2 的 .so 文件,启动时报undefined symbol - 检查是否装对:运行
php -v和rpm -q php php-mysqlnd,确认两者的版本号都是 7.4.x
Remi 仓库启用后,dnf update 可能意外升级到 PHP 8.x
Remi 仓库默认包含多个 PHP 流(7.3、7.4、8.0、8.1…),如果没锁住流,dnf update 可能把 php:remi-7.4 升级成 php:remi-8.0,尤其当后者被设为新默认时。
- 执行
dnf module list php,确认remi-7.4行显示[e],且没有其他remi-*行带[e] - 生产环境建议加锁:
dnf module install php:remi-7.4(注意是install不是enable),它会把该流设为“永久启用+锁定” - 验证锁定效果:
dnf module info php:remi-7.4中应含Status: enabled, default, installed
模块流不是开关,是契约。启用 php:remi-7.4 意味着你承诺整个 PHP 生态(核心、FPM、所有扩展)都走这个流——漏掉任何一个包,都可能在某次 dnf update 后突然崩掉。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











