PHP 7.4 安装需依系统选择策略:Ubuntu/Debian 用 Ondřej PPA 源(如 sudo add-apt-repository ppa:ondrej/php),CentOS/RHEL 则须源码编译;共存时 update-alternatives 仅控制 CLI,Web 服务需单独配置 FPM 或模块。

PHP 7.4 已于 2023 年 11 月结束官方支持,但在生产环境中仍广泛存在;在较新系统(如 Ubuntu 24.04、CentOS Stream 9 或 Debian 12)上直接用 apt install php7.4 或 yum install php74 会失败——因为主流发行版仓库已移除该版本。想装,必须换策略:要么用第三方可信源(如 Ondřej PPA),要么自己编译;想和 PHP 8.x 共存,update-alternatives 是最轻量、最可控的方式,但仅管 CLI,不管 Web 服务器模块。
Ubuntu/Debian 上装 PHP 7.4 用 Ondřej PPA 源
这是目前最省事且稳定的方式,适用于 Ubuntu 22.04+ 和 Debian 11/12(需手动适配)。PPA 提供了预编译的二进制包,含常用扩展,无需处理依赖地狱。
- 执行
sudo add-apt-repository ppa:ondrej/php添加源(注意:该 PPA 不支持 Ubuntu 24.04 LTS 的默认仓库配置,需先确认其sources.list.d条目是否启用 http 协议或签名密钥是否过期) - 运行
sudo apt update,如果报NO_PUBKEY错误,补一句sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4F4EA0AAE5267A6C(密钥可能随时间轮换,以apt update实际报错为准) - 安装核心包:
sudo apt install php7.4 php7.4-cli php7.4-fpm php7.4-mysql php7.4-curl php7.4-gd php7.4-mbstring php7.4-xml php7.4-zip - 验证:
php7.4 -v应输出PHP 7.4.33(截至 2026 年 4 月,这是最后一个安全更新版)
CentOS/RHEL 系统装 PHP 7.4 只能靠源码编译
Red Hat 官方从 CentOS 8 Stream 起就不再维护 PHP 7.4,EPEL 也已下架。你无法用 yum install php74 成功——它要么找不到包,要么装的是阉割版(缺 pdo_mysql、opcache 等关键扩展)。
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 必须下载源码:
wget https://www.php.net/distributions/php-7.4.33.tar.gz,解压后进入目录 - 确保装齐依赖:
sudo yum install gcc make autoconf libxml2-devel openssl-devel curl-devel libjpeg-devel libpng-devel freetype-devel sqlite-devel oniguruma-devel libzip-devel bzip2-devel gmp-devel(CentOS 8+ 还要加libxcrypt-devel,否则 configure 报错) -
./configure参数别照抄网上旧教程:去掉已废弃的--with-apxs2(Apache 2.4+ 默认不带 apxs),改用--enable-fpm;--with-openssl-dir改为--with-openssl(新版 OpenSSL 3.x 兼容性要求) - 编译安装后,手动创建 systemd service 文件(
/usr/lib/systemd/system/php74-fpm.service),否则systemctl start php74-fpm会失败
让 PHP 7.4 和 8.1/8.2 在同一台机器上共存
update-alternatives 可以切换 php 命令指向,但它的作用范围仅限于 shell 中的 CLI 调用;Web 服务(Apache/Nginx)完全不受影响,它们各自加载自己的 PHP 模块或通过 FPM socket 连接,必须单独配置。
立即学习“PHP免费学习笔记(深入)”;
- 注册两个版本:
sudo update-alternatives --install /usr/bin/php php /usr/bin/php7.4 74和sudo update-alternatives --install /usr/bin/php php /usr/bin/php8.1 81(优先级数字决定默认选谁) - 交互切换:
sudo update-alternatives --config php,选编号后,php -v立即生效 - Apache 用户注意:
a2enmod php7.4和a2dismod php8.1必须成对执行,且重启apache2后,phpinfo()显示的才是 Apache 实际加载的版本 - Nginx 用户注意:FPM socket 路径通常为
/run/php/php7.4-fpm.sock和/run/php/php8.1-fpm.sock,Nginx 配置里fastcgi_pass必须明确写清,不能只写127.0.0.1:9000
为什么 php -v 显示 7.4 但 phpinfo() 显示 8.1?
这是最常被忽略的混淆点:CLI 和 Web SAPI 是两套独立的加载机制。你改了 update-alternatives,只影响终端里敲的 php;而 Apache/Nginx 加载的是编译时绑定的模块,或连接的 FPM 进程,跟 /usr/bin/php 软链完全无关。
- 查 CLI 版本:
php -v或which php - 查 Apache 模块版本:
apache2ctl -M | grep php,再看/etc/apache2/mods-enabled/下哪个php*.load是软链目标 - 查 Nginx + FPM 版本:看
ps aux | grep fpm,确认启动的是php7.4-fpm还是php8.1-fpm,再核对其配置文件中listen =的 socket 路径是否与 Nginx 配置一致 - 临时调试建议:在 Web 目录放一个
test.php,内容为<?php echo PHP_BINARY; ?>,它会输出 Web SAPI 实际调用的 PHP 二进制路径,比phpinfo()更直白


















