结论:用 Vagrant 搭建 PHP 7.4 开发虚拟机必须选用 CentOS 7 或 Ubuntu 20.04 Box 并手动启用 remi 等旧源,因 Ubuntu 22.04+/CentOS 8+ 默认源已移除 PHP 7.4 支持,否则 php -v 会报错或安装错误版本。

直接说结论:用 Vagrant 搭建 PHP 7.4 开发虚拟机,不能依赖 Ubuntu 22.04+ 或 CentOS 8+ 默认源——它们已移除 PHP 7.4 支持。必须显式指定兼容的 Box + 手动启用旧源(如 remi 或 ondrej),否则 vagrant up 后执行 php -v 会报错或装上错误版本。
选对 Box:CentOS 7 或 Ubuntu 20.04 是底线
PHP 7.4 的官方支持生命周期已于 2023 年 11 月结束,主流新 Box 已不再预装或提供安全更新。硬要装 PHP 7.4,Box 必须满足两个条件:
- OS 内核和包管理器仍支持 PHP 7.4 二进制包(即未删除该版本仓库)
- 不强制升级到 PHP 8.x(某些新版 Ubuntu 自动替换
php包为 8.1+)
centos/7 和 ubuntu/focal64(Ubuntu 20.04)是目前最稳妥的选择。ubuntu/jammy64(22.04)默认只有 PHP 8.1,即使加 apt install php7.4 也会失败(包不存在)。hashicorp/bionic64(18.04)虽有 PHP 7.4,但其系统源已归档,apt update 会大量 404,需手动换源,不推荐新手。
Shell Provisioner 装 PHP 7.4:remi 源是 CentOS 7 唯一靠谱路径
CentOS 7 默认无 PHP 7.4,必须启用第三方源。remi 是最稳定、更新最及时的选项(比 webtatic 更活跃),且明确支持 PHP 7.4 到 EOL。
立即学习“PHP免费学习笔记(深入)”;
在 Vagrantfile 的 config.vm.provision "shell" 中写:
config.vm.provision "shell", inline: <<-SHELL # 安装 EPEL(remi 依赖) yum install -y epel-release # 安装 remi 源(注意:不是 remi-php74,而是 remi-release) yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm # 启用 php74 系列仓库 yum-config-manager --enable remi-php74 # 安装核心扩展(按需增减) yum install -y php74 php74-php-fpm php74-php-mysqlnd php74-php-curl php74-php-xml php74-php-mbstring # 创建软链接,让 `php` 命令指向 php74 ln -sf /usr/bin/php74 /usr/bin/php ln -sf /usr/bin/php74ize /usr/bin/phpize ln -sf /usr/bin/php74-config /usr/bin/php-config SHELL
⚠️ 容易踩的坑:
- 忘记
yum-config-manager——它来自yum-utils,必须先yum install -y yum-utils - 直接
yum install php→ 装的是 PHP 5.4(CentOS 7 默认) - 用
php74-php*包但没建软链接 →php -v仍显示 5.4
Ubuntu 20.04 怎么装 PHP 7.4:ondrej PPA 是唯一选择
Ubuntu 20.04 默认源只提供 PHP 7.4,但需手动添加维护者仓库:
config.vm.provision "shell", inline: <<-SHELL apt-get update apt-get install -y software-properties-common curl # 添加 ondrej 的 PHP PPA(他维护 Ubuntu 的 PHP 包多年) add-apt-repository -y ppa:ondrej/php apt-get update # 显式指定版本,避免自动选 8.x apt-get install -y php7.4 php7.4-fpm php7.4-mysql php7.4-curl php7.4-xml php7.4-mbstring # 替换默认 php 命令(Ubuntu 默认不创建 /usr/bin/php 软链) update-alternatives --set php /usr/bin/php7.4 SHELL
⚠️ 注意点:
-
add-apt-repository在最小化安装的 Ubuntu 上可能不存在,必须先装software-properties-common - 不加
ppa:ondrej/php就运行apt install php→ Ubuntu 20.04 会装 PHP 7.4,但后续apt upgrade可能悄悄升级到 8.0(如果 PPA 未锁定) -
update-alternatives是关键:否则php -v可能仍指向旧版本或报错“no alternative”
验证与收尾:别跳过这三步
Vagrant 启动后,进虚拟机手动确认:
- 运行
php -v,输出第一行必须含7.4.(不是 7.4.33 就行,版本号次要) - 运行
php -m | grep mysqli,确保 MySQL 扩展已加载(很多 provisioner 忘配php74-php-mysqlnd或php7.4-mysql) - 若用 Nginx + PHP-FPM,检查
systemctl is-active php74-php-fpm(CentOS)或systemctl is-active php7.4-fpm(Ubuntu)是否为active
最后提醒:PHP 7.4 已无安全更新,仅限遗留项目维护。如果新项目还强行锁死 7.4,迟早要面对 OpenSSL 3.0 兼容性、Composer 2.5+ 报错等隐性问题——这些不会在 vagrant up 阶段暴露,但会在某次 composer install 时突然崩。



















