发布于2026-05-22 阅读(0)
扫一扫,手机访问
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服务器那边得另做配置。

目前来看,通过Ondřej的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月,这是该分支的最后一个安全更新版本)。对于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,否则配置阶段可能会报错。--with-apxs2参数,改用--enable-fpm来启用PHP-FPM。另外,--with-openssl-dir参数在新版OpenSSL 3.x下可能有问题,直接使用--with-openssl通常更稳妥。/usr/lib/systemd/system/php74-fpm.service)。如果不做这一步,直接运行systemctl start php74-fpm肯定会失败。很多朋友指望用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命令就会立即生效。a2enmod php7.4和a2dismod php8.1这样的命令,并且务必重启Apache服务后,phpinfo()显示的才是Apache实际加载的版本。/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这个软链接指向哪里没有任何关系。
php -v,或者用which php查看命令路径。apache2ctl -M | grep php,然后检查/etc/apache2/mods-enabled/目录下,哪个php*.load文件是软链接的目标。ps aux | grep fpm查看进程,确认运行的是php7.4-fpm还是php8.1-fpm,再核对它的配置文件(通常是www.conf)中listen =指定的socket路径,是否与Nginx配置中的fastcgi_pass一致。test.php文件,内容只有一行:。通过浏览器访问这个文件,它会直接输出Web SAPI实际调用的PHP二进制文件完整路径,比查看庞大的phpinfo()页面更直接。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
4
5
6
7
8
9