Linux最新系统安装PHP 7.4与老版本共存

作者:技术拾光

时间:2026-06-04

浏览:442

PHP 7.4 虽然早在 2023 年 11 月就结束了官方支持,但在不少生产环境里,它依然是“钉子户”。如果你需要在 Ubuntu 24.04、CentOS Stream 9 这类新系统上安装它,直接运行 apt install php7.4 或 yum install php74 大概率会失败—

文章目录

PHP 7.4 虽然早在 2023 年 11 月就结束了官方支持,但在不少生产环境里,它依然是“钉子户”。如果你需要在 Ubuntu 24.04、CentOS Stream 9 这类新系统上安装它,直接运行 apt install php7.4 或 yum install php74 大概率会失败——因为主流发行版的仓库早就把它移除了。想成功安装,就得换个思路:要么借助可靠的第三方源,要么就得自己动手编译。如果还想让它和 PHP 8.x 版本和平共处,update-alternatives 是个轻量可控的选择,但得明白,它只管命令行(CLI)环境,Web 服务器那边得另做配置。

Linux最新系统安装PHP 7.4与老版本共存

Ubuntu/Debian 上安装 PHP 7.4 使用 Ondej PPA 源

目前来看,通过 Ondej 的 PPA 源安装是最省心、也最稳定的方法,适用于 Ubuntu 22.04+ 和 Debian 11/12(后者可能需要手动适配)。这个源提供了预编译好的二进制包,包含常用扩展,能帮你省去处理依赖关系的麻烦。

  • 首先,添加源:sudo add-apt-repository ppa:ondrej/php。这里有个细节需要注意,这个 PPA 可能不支持 Ubuntu 24.04 LTS 的默认仓库配置,添加后最好检查一下 sources.list.d 里的条目是否正常启用,或者签名密钥是否过期。
  • 接着更新包列表: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 及更新版本,官方仓库和 EPEL 源都已经移除了 PHP 7.4。所以,想用 yum install php74 一键安装是行不通的,要么找不到包,要么装上的版本缺斤少两(比如没有 pdo_mysql、opcache 这些关键扩展)。这时候,源码编译是唯一可靠的路。

  • 第一步,下载源码: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,否则配置阶段可能会报错。
  • 第三步,配置编译参数。这里要特别注意,别完全照搬网上的旧教程。对于 Apache 2.4+,默认不带 apxs,所以应该去掉 --with-apxs2 参数,改用 --enable-fpm 来启用 PHP-FPM。另外,--with-openssl-dir 参数在新版 OpenSSL 3.x 下可能有问题,直接使用 --with-openssl 通常更稳妥。
  • 编译安装完成后,还有关键一步:需要手动创建 systemd 服务文件(例如 /usr/lib/systemd/system/php74-fpm.service)。如果不做这一步,直接运行 systemctl start php74-fpm 肯定会失败。

让 PHP 7.4 和 8.1/8.2 在同一台机器上共存

很多朋友指望用 update-alternatives 来管理所有 PHP 版本,但它的能力范围其实有限。这个工具只能切换 Shell 命令行中 php 命令的指向,对于 Web 服务(无论是 Apache 还是 Nginx)是完全不起作用的。Web 服务器加载的是独立的 PHP 模块,或者连接的是独立的 PHP-FPM 进程,这些都需要单独配置。

  • 注册版本到 update-alternatives: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 用户:切换 Web 使用的 PHP 版本,需要成对使用 a2enmod php7.4 和 a2dismod php8.1 这样的命令,并且务必重启 Apache 服务后,phpinfo() 显示的才是 Apache 实际加载的版本。
  • 对于 Nginx + PHP-FPM 用户:关键点在于 FPM 监听的 socket 路径。通常会是 /run/php/php7.4-fpm.sock 和 /run/php/php8.1-fpm.sock 这样独立的文件。Nginx 配置里的 fastcgi_pass 指令必须精确指向你想要的那个 socket 路径,不能简单地写成 127.0.0.1:9000(除非你特意配置了同一个端口)。

为什么 php -v 显示 7.4 但 phpinfo() 显示 8.1?

这是环境配置中最容易让人困惑的一点:命令行接口(CLI)和 Web 服务器接口(SAPI)是两套完全独立的运行机制。你修改 update-alternatives,影响的仅仅是终端里执行的 php 命令。而 Apache 或 Nginx,它们加载的是编译时就已经绑定好的 PHP 模块,或者连接的是独立运行的 PHP-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,再核对它的配置文件(通常是 www.conf)中 listen = 指定的 socket 路径,是否与 Nginx 配置中的 fastcgi_pass 一致。
  • 一个实用的调试技巧:在 Web 目录下创建一个 test.php 文件,内容只有一行:。通过浏览器访问这个文件,它会直接输出 Web SAPI 实际调用的 PHP 二进制文件完整路径,比查看庞大的 phpinfo() 页面更直接。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章