GitHub Actions 中无法用 matrix 覆盖 PHP 5.6,因官方运行器已移除支持且 setup-php v2.30.0+ 不再安装 PHP 5.x;可行矩阵为 PHP 7.4–8.5,需配合 PHPCompatibility 检查、platform.php 声明及 PHPStan level 5/6 使用。

直接用 GitHub Actions 的 strategy.matrix 覆盖 PHP 5.6 到 8.3 是不可行的——不是语法问题,而是环境限制。GitHub 官方托管运行器(ubuntu-latest 等)已**不再支持 PHP 5.6 及更早版本**,且 PHP 5.6、5.5、5.4 等早已终止所有支持,setup-php 插件也从 v2.30.0 起正式移除了对 PHP 5.x 的安装能力。
实际可行的版本覆盖范围
当前(2026 年中)在 GitHub Actions 中稳定可用的 PHP 版本为:
- PHP 7.4:已结束支持,但 setup-php 仍提供安装(仅限自托管或旧版 ubuntu-20.04 运行器)
- PHP 8.0 – 8.3:全部可稳定安装,推荐作为主力测试矩阵
- PHP 8.4 / 8.5:活跃支持,可加入矩阵验证前瞻性兼容性
- PHP 5.6 – 7.3:官方运行器不支持;若必须验证,需改用自托管 runner + 手动编译 PHP 或 Docker 模拟
标准矩阵配置(推荐 PHP 7.4–8.5)
以下 workflow 片段可在 ubuntu-22.04 或 ubuntu-24.04 上稳定运行:
jobs:
test:
strategy:
matrix:
php-version: ['7.4', '8.0', '8.1', '8.2', '8.3', '8.4', '8.5']
name: PHP ${{ matrix.php-version }}
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-version }}
tools: composer, phpunit
- name: Install dependencies
run: composer install --no-interaction --prefer-dist
- name: Run static analysis
run: vendor/bin/phpcs --standard=PHPCompatibility --runtime-set testVersion 7.4-8.5 .
- name: Run tests
run: vendor/bin/phpunit
注意:--runtime-set testVersion 7.4-8.5 告诉 PHPCompatibility 检查代码是否能在该整个区间内安全运行,而非只针对当前 PHP 版本。
使用约定式提交(Conventional Commits)从 Git 历史记录中生成结构化变更日志,支持多种格式、AI 增强型描述以及可自定义的范围……
立即学习“PHP免费学习笔记(深入)”;
若真需覆盖 PHP 5.6(如遗留系统审计)
只能绕过 GitHub 托管运行器,采用以下任一方式:
-
Docker 方式:用
docker run -v $(pwd):/app php:5.6-cli启动容器,在其中执行composer install和php --version、php -m等基础校验 -
自托管 runner:在自有服务器上安装 PHP 5.6,并注册为 GitHub Actions 自托管 runner,再在 workflow 中指定
runs-on: self-hosted -
本地模拟 + 提交前检查:开发机用 phpbrew 安装 PHP 5.6,CI 不跑,但要求 PR 提交前本地通过
phpcs --standard=PHPCompatibility --runtime-set testVersion 5.6-
关键配套动作不能少
光跑多版本 PHP 不等于解决兼容性。必须同步落实:
- 在
composer.json的config.platform.php明确声明最低支持版本,例如"7.4",防止高版本环境误装不兼容依赖 - PHPUnit 测试需声明
require.php范围,并在各 PHP 版本下独立执行composer install,避免缓存污染 - PHPStan 分析应固定使用
level: 5或6,避免level: 7+引入过度严格的类型推导,干扰跨版本判断 - 若项目含非
src/下的 PSR-4 映射路径(如tests/Support),需在phpstan.neon中显式添加paths:,否则扫描会遗漏


















