shivammathur/setup-php

GitHub: shivammathur/setup-php

一款用于在 GitHub Actions 中快速搭建 PHP 开发环境的官方 Action,支持多版本、多平台、扩展和工具链的一键配置。

Stars: 3188 | Forks: 405

Setup PHP in GitHub Actions

在 GitHub Actions 中设置 PHP

GitHub Actions status Codecov Code Coverage LICENSE PHP Versions Supported

setup-php reddit setup-php twitter setup-php status

在 [GitHub Actions](https://github.com/features/actions "GitHub Actions") 中设置具有所需扩展、php.ini 配置、代码覆盖率支持以及各种工具(如 composer)的 PHP 环境。此 Action 为您提供了一个跨平台接口,用于设置测试应用程序所需的 PHP 环境。请参阅 [用法](#memo-usage "How to use this") 部分和 [示例](#examples "Examples of use") 以了解如何使用。 ## 目录 - [操作系统/平台支持](#cloud-osplatform-support) - [GitHub 托管的 Runner](#github-hosted-runners) - [自托管 Runner](#self-hosted-runners) - [PHP 支持](#tada-php-support) - [PHP 扩展支持](#heavy_plus_sign-php-extension-support) - [工具支持](#wrench-tools-support) - [覆盖率支持](#signal_strength-coverage-support) - [Xdebug](#xdebug) - [PCOV](#pcov) - [禁用覆盖率](#disable-coverage) - [用法](#memo-usage) - [输入参数](#inputs) - [输出参数](#outputs) - [标志](#flags) - [基本设置](#basic-setup) - [矩阵设置](#matrix-setup) - [Nightly 构建设置](#nightly-build-setup) - [Debug 构建设置](#debug-build-setup) - [线程安全设置](#thread-safe-setup) - [强制更新设置](#force-update-setup) - [详细模式设置](#verbose-setup) - [多架构设置](#multi-arch-setup) - [自托管设置](#self-hosted-setup) - [本地测试设置](#local-testing-setup) - [JIT 配置](#jit-configuration) - [缓存扩展](#cache-extensions) - [缓存 Composer 依赖](#cache-composer-dependencies) - [GitHub Composer 认证](#github-composer-authentication) - [Private Packagist 认证](#private-packagist-authentication) - [手动 Composer 认证](#manual-composer-authentication) - [内联 PHP 脚本](#inline-php-scripts) - [问题匹配器](#problem-matchers) - [示例](#examples) - [版本控制](#bookmark-versioning) - [许可证](#scroll-license) - [贡献](#1-contributions) - [支持本项目](#sparkling_heart-support-this-project) - [依赖](#package-dependencies) - [延伸阅读](#bookmark_tabs-further-reading) ## :cloud: 操作系统/平台支持 `setup-php` 在以下操作系统/平台上支持 `GitHub 托管` 和 `自托管` runner。 ### GitHub 托管的 Runner | 虚拟环境 | 架构 | YAML 工作流标签 | 预装 PHP | |---------------------|---------|------------------------------------|-------------------| | Ubuntu 24.04 | x86_64 | `ubuntu-latest` 或 `ubuntu-24.04` | `PHP 8.3` | | Ubuntu 22.04 | x86_64 | `ubuntu-22.04` | `PHP 8.1` | | Ubuntu 24.04 | aarch64 | `ubuntu-24.04-arm` | `PHP 8.3` | | Ubuntu 22.04 | aarch64 | `ubuntu-22.04-arm` | `PHP 8.1` | | Windows Server 2025 | x64 | `windows-2025` | `PHP 8.5` | | Windows Server 2022 | x64 | `windows-latest` 或 `windows-2022` | `PHP 8.5` | | macOS Tahoe 26.x | arm64 | `macos-26` | - | | macOS Sequoia 15.x | arm64 | `macos-latest` 或 `macos-15` | - | | macOS Sonoma 14.x | arm64 | `macos-14` | - | | macOS Tahoe 26.x | x86_64 | `macos-26-intel` | `PHP 8.5` | | macOS Sequoia 15.x | x86_64 | `macos-15-intel` | `PHP 8.5` | ### 自托管 Runner | 宿主操作系统/虚拟环境 | YAML 工作流标签 | |----------------------------------|----------------------------| | Ubuntu 24.04 | `self-hosted` 或 `Linux` | | Ubuntu 22.04 | `self-hosted` 或 `Linux` | | Debian 13 | `self-hosted` 或 `Linux` | | Debian 12 | `self-hosted` 或 `Linux` | | Debian 11 | `self-hosted` 或 `Linux` | | Windows 7 及更高版本 | `self-hosted` 或 `Windows` | | Windows Server 2012 R2 及更高版本 | `self-hosted` 或 `Windows` | | macOS Tahoe 26.x x86_64/arm64 | `self-hosted` 或 `macOS` | | macOS Sequoia 15.x x86_64/arm64 | `self-hosted` 或 `macOS` | | macOS Sonoma 14.x x86_64/arm64 | `self-hosted` 或 `macOS` | - 请参阅 [自托管设置](#self-hosted-setup) 以在自托管 runner 上使用此 Action。 - 基于上述 Ubuntu 和 Debian 版本的操作系统也尽最大努力提供支持。 - 如果请求的 PHP 版本已预装,`setup-php` 会切换到该版本,否则将安装该 PHP 版本。 ## :tada: PHP 支持 在所有支持的操作系统/平台上,可以根据 runner 设置以下 PHP 版本。 - 在 GitHub 托管的 runner 上支持 PHP 5.3 到 PHP 8.6,macOS ARM64 runner (macos-14) 除外。 - 在 GitHub 托管的 macOS ARM64 runner (macos-14) 上支持 PHP 5.6 到 PHP 8.6。 - 在自托管 runner 上支持 PHP 5.6 到 PHP 8.6。 | PHP 版本 | 稳定性 | 发布支持 | Runner 支持 | |-------------|-----------|-----------------------|--------------------------------| | `5.3` | `Stable` | `End of life` | `GitHub-hosted` | | `5.4` | `Stable` | `End of life` | `GitHub-hosted` | | `5.5` | `Stable` | `End of life` | `GitHub-hosted` | | `5.6` | `Stable` | `End of life` | `GitHub-hosted`, `self-hosted` | | `7.0` | `Stable` | `End of life` | `GitHub-hosted`, `self-hosted` | | `7.1` | `Stable` | `End of life` | `GitHub-hosted`, `self-hosted` | | `7.2` | `Stable` | `End of life` | `GitHub-hosted`, `self-hosted` | | `7.3` | `Stable` | `End of life` | `GitHub-hosted`, `self-hosted` | | `7.4` | `Stable` | `End of life` | `GitHub-hosted`, `self-hosted` | | `8.0` | `Stable` | `End of life` | `GitHub-hosted`, `self-hosted` | | `8.1` | `Stable` | `End of life` | `GitHub-hosted`, `self-hosted` | | `8.2` | `Stable` | `Security fixes only` | `GitHub-hosted`, `self-hosted` | | `8.3` | `Stable` | `Security fixes only` | `GitHub-hosted`, `self-hosted` | | `8.4` | `Stable` | `Active` | `GitHub-hosted`, `self-hosted` | | `8.5` | `Stable` | `Active` | `GitHub-hosted`, `self-hosted` | | `8.6` | `Nightly` | `In development` | `GitHub-hosted`, `self-hosted` | ## :heavy_plus_sign: PHP 扩展支持 可以使用 `extensions` 输入参数设置 PHP 扩展。它接受 csv 格式的 `string`。 - 在 `Ubuntu` 上,可以设置以包形式提供、在 `PECL` 上可用或位于 git 仓库中的扩展。 ``` - name: Setup PHP with PECL extension uses: shivammathur/setup-php@v2 with: php-version: '8.5' extensions: imagick, redis ``` - 在 `Windows` 上,可以设置 `PECL` 上提供 `DLL` 二进制文件的扩展。 - 在 `macOS` 上,可以设置 `PECL` 上可用或位于 git 仓库中的扩展。 - 在 `Ubuntu` 和 `macOS` 上,要从 git 仓库编译和安装扩展,请遵循此[指南](https://github.com/shivammathur/setup-php/wiki/Add-extension-from-source "Guide to compile and install PHP extensions in setup-php")。 - 如果指定了随 PHP 一起安装的扩展,它们将被启用。 - 可以通过在扩展名称后附加版本来设置 `PECL` 上特定版本的扩展。这对于安装支持已停止维护 PHP 版本的旧版扩展很有用。 ``` - name: Setup PHP with specific version of PECL extension uses: shivammathur/setup-php@v2 with: php-version: '5.4' extensions: swoole-1.9.3 ``` - 可以通过在扩展名称后附加其状态(即 `alpha`、`beta`、`devel` 或 `snapshot`)来设置 `PECL` 上提供的预发布版本扩展。 ``` - name: Setup PHP with pre-release PECL extension uses: shivammathur/setup-php@v2 with: php-version: '8.5' extensions: xdebug-beta ``` - 在 `Ubuntu` 和 `macOS` 上,要使用库或自定义配置从 PECL 编译和安装扩展,请遵循此[指南](https://github.com/shivammathur/setup-php/wiki/Add-extension-from-PECL-with-libraries-and-custom-configuration "Guide to compile and install PHP extensions using PECL with libraries and custom configuration in setup-php")。 - 可以通过在共享扩展前加上 `:` 来禁用它们。所有依赖于指定扩展的扩展也将被禁用。 ``` - name: Setup PHP and disable opcache uses: shivammathur/setup-php@v2 with: php-version: '8.5' extensions: :mbstring ``` - 可以通过指定 `none` 来禁用所有共享扩展。当 `none` 与其他扩展一起指定时,它会被提升到输入的开头。因此,所有共享扩展将首先被禁用,然后再处理输入中的其余扩展。 这将禁用所有核心和第三方共享扩展,因此可能会破坏需要它们的某些工具。在设置工具时,会尽最大努力重新启用所需的扩展。因此,建议在 `extensions` 输入中将工具所需的扩展放在 `none` 之后,以避免任何问题。 ``` - name: Setup PHP without any shared extensions except mbstring uses: shivammathur/setup-php@v2 with: php-version: '8.5' extensions: none, mbstring ``` - 在 `Ubuntu` 工作流中,对于 `PHP 5.6` 及更高版本,可以通过在 `intl` 后附加 `ICU` 版本来设置具有特定 `ICU` 版本的 `intl` 扩展。PHP 8.4 及更低版本支持 `ICU 50.2` 及更新版本,PHP 8.5 及更高版本支持 `ICU 57.2` 及更新版本。有关支持的特定版本,请参阅 [`ICU builds`](https://github.com/shivammathur/icu-intl#icu4c-builds)。 ``` - name: Setup PHP with intl uses: shivammathur/setup-php@v2 with: php-version: '8.5' extensions: intl-77.1 ``` - 在 `setup-php` 运行后默认加载的扩展可以在 [wiki](https://github.com/shivammathur/setup-php/wiki) 上找到。 - 这些扩展具有自定义支持: - `Ubuntu` 上的 `cubrid` 和 `pdo_cubrid`。 - `Ubuntu` 和 `macOS` 上的 `event`、`gearman`、`geos` 和 `relay`。 - 所有受支持操作系统上的 `blackfire`、`couchbase`、`ibm_db2`、`ioncube`、`oci8`、`pdo_firebird`、`pdo_ibm`、`pdo_oci`、`pecl_http`、`phalcon3`、`phalcon4`、`phalcon5` 和 `zephir_parser`。 - 默认情况下,无法正常添加或禁用的扩展会在日志中留下错误消息,执行不会中断。要更改此行为,您可以将 `fail-fast` 标志设置为 `true`。 ``` - name: Setup PHP with fail-fast uses: shivammathur/setup-php@v2 with: php-version: '8.5' extensions: oci8 env: fail-fast: true ``` ## :wrench: 工具支持 这些工具可以使用 `tools` 输入参数全局设置。它接受 csv 格式的字符串。 [`backward-compatibility-check`], [`behat`], [`blackfire`], [`blackfire-player`], [`box`], [`castor`], [`churn`], [`codeception`], [`composer`], [`composer-dependency-analyser`], [`composer-normalize`], [`composer-prefetcher`], [`composer-require-checker`], [`composer-unused`], [`cs2pr`], [`deployer`], [`ecs`], [`flex`], [`grpc_php_plugin`], [`infection`], [`mago`], [`name-collision-detector`], [`parallel-lint`], [`pecl`], [`phan`], [`phing`], [`phinx`], [`phive`], [`php-config`], [`php-cs-fixer`], [`php-scoper`], [`phpcbf`], [`phpcpd`], [`phpcs`], [`phpdoc`] 或 [`phpDocumentor`], [`phpize`], [`phplint`], [`phpmd`], [`phpspec`], [`phpstan`], [`phpunit`], [`phpunit-bridge`], [`phpunit-polyfills`], [`pie`], [`pint`], [`prestissimo`], [`protoc`], [`psalm`], [`rector`], [`symfony`] 或 [`symfony-cli`], [`vapor`] 或 [`vapor-cli`], [`wp`] 或 [`wp-cli`] - 除了上述工具外,还可以通过将任何 composer 工具或包指定为 `vendor/package`(与 Packagist 上的列表匹配)来全局设置。此格式接受与 `composer` 相同的[版本约束](https://getcomposer.org/doc/articles/versions.md#writing-version-constraints "Composer version constraints")。 ``` - name: Setup PHP with tools uses: shivammathur/setup-php@v2 with: php-version: '8.5' tools: vimeo/psalm ``` - 要设置特定版本的工具,请以 `tool:version` 的格式指定。 版本可以是以下格式: - Semver(语义版本)。例如 `tool:1.2.3` 或 `tool:1.2.3-beta1`。 - 主版本号。例如 `tool:1` 或 `tool:1.x`。 - 主版本号和次版本号。例如 `tool:1.2` 或 `tool:1.2.x`。 当您仅指定主版本号或 `major.minor` 格式的版本时,将设置与输入匹配的最新补丁版本。 - 默认设置最新稳定版本的 `composer`。您可以通过指定主版本 `v1` 或 `v2`,或者 `major.minor` 或 `semver` 格式的版本来设置所需的 `composer` 版本。此外,对于 composer,还可以指定 `snapshot` 和 `preview` 以设置相应的版本。 ``` - name: Setup PHP with composer v2 uses: shivammathur/setup-php@v2 with: php-version: '8.5' tools: composer:v1 ``` - 如果您在工作流中不使用 composer,可以指定 `tools: none` 来跳过它。 ``` - name: Setup PHP without composer uses: shivammathur/setup-php@v2 with: php-version: '8.5' tools: none ``` - 在 Linux 和 macOS 上,默认为所有支持的 PHP 版本设置工具 `pear`、`pecl`、`phpize` 和 `php-config`。 - 当在 tools 输入中指定 `blackfire` 时,将设置最新版本的 `blackfire` cli。有关在 GitHub Actions 中使用 `blackfire`,请参阅[官方文档](https://blackfire.io/docs/integrations/ci/github-actions "Blackfire.io documentation for GitHub Actions")。 - 除非在 tools 输入中也指定了 `composer:v1`,否则工具 `prestissimo` 和 `composer-prefetcher` 将被跳过。建议弃用 `prestissimo` 并使用 `composer v2`。 - 默认情况下,除 `composer` 外,无法设置的工具会在日志中留下错误消息,执行不会中断。要更改此行为,您可以将 `fail-fast` 标志设置为 `true`。 ``` - name: Setup PHP with fail-fast uses: shivammathur/setup-php@v2 with: php-version: '8.5' tools: deployer env: fail-fast: true ``` - 默认情况下,`composer` 会阻止其所有插件。如果您使用 `tools` 输入安装 composer 插件,它将被添加到允许列表中;或者,如果您的依赖项包含 composer 插件,您可以通过设置 `COMPOSER_ALLOW_PLUGINS`(接受插件名称的 csv 字符串)来允许它们。 ``` - name: Setup PHP with fail-fast uses: shivammathur/setup-php@v2 with: php-version: '8.5' env: COMPOSER_ALLOW_PLUGINS: composer/installers, composer/satis ``` ``` - name: Setup PHP with composer and custom process timeout uses: shivammathur/setup-php@v2 with: php-version: '8.5' env: COMPOSER_PROCESS_TIMEOUT: 300 ``` ## :signal_strength: 覆盖率支持 ### Xdebug 指定 `coverage: xdebug` 以使用 `Xdebug` 并禁用 `PCOV`。 在所有[支持的 PHP 版本](#tada-php-support "List of PHP versions supported on this GitHub Action")上运行。 ``` - name: Setup PHP with Xdebug uses: shivammathur/setup-php@v2 with: php-version: '8.5' coverage: xdebug ``` - 当您指定 `coverage: xdebug` 时,默认设置与 PHP 版本兼容的最新版 Xdebug。 - 如果您在 PHP 7.2、7.3 或 7.4 上需要 Xdebug 2.x,可以指定 `coverage: xdebug2`。 ``` - name: Setup PHP with Xdebug 2.x uses: shivammathur/setup-php@v2 with: php-version: '7.4' coverage: xdebug2 ``` ### PCOV 指定 `coverage: pcov` 以使用 `PCOV` 并禁用 `Xdebug`。 在 PHP 7.1 及更新的 PHP 版本上运行。 - 如果您的源代码目录不是 `src`、`lib` 或 `app`,请使用 `ini-values` 输入指定 `pcov.directory`。 ``` - name: Setup PHP with PCOV uses: shivammathur/setup-php@v2 with: php-version: '8.5' ini-values: pcov.directory=api #optional, see above for usage. coverage: pcov ``` - PHPUnit 8.x 及更高版本开箱即支持 PCOV。 - 如果您使用的是 PHPUnit 5.x、6.x 或 7.x,则需要在执行测试之前设置 `pcov/clobber`。 ``` - name: Setup PCOV run: | composer require pcov/clobber vendor/bin/pcov clobber ``` ### 禁用覆盖率 指定 `coverage: none` 以同时禁用 `Xdebug` 和 `PCOV`。 出于以下原因禁用覆盖率: - 您在测试时不生成覆盖率报告。 - 您使用 `phpdbg` 运行测试。 - 您使用 `blackfire` 分析代码。 - 您在 JIT 模式下使用 PHP。有关更多详细信息,请参阅 [JIT 配置](#jit-configuration) 部分。 ``` - name: Setup PHP with no coverage driver uses: shivammathur/setup-php@v2 with: php-version: '8.5' coverage: none ``` ## :memo: 用法 ### 输入参数 #### `php-version` (可选) - 指定您要设置的 PHP 版本。 - 接受一个 `string`。例如 `'8.5'`。 - 接受 `lowest` 以设置最低支持的 PHP 版本。 - 接受 `highest` 或 `latest` 以设置最新的稳定 PHP 版本。 - 接受 `nightly` 以设置来自 PHP master 分支的 nightly 构建。 - 接受 `pre-installed` 以设置最高版本的预装 PHP。您可以将其与 `update: true` 结合使用以更新预装的 PHP 版本。 - 接受 `d.x` 格式,其中 `d` 是主版本号。例如 `5.x`、`7.x` 和 `8.x`。 - 有关支持的 PHP 版本,请参阅 [PHP 支持](#tada-php-support)。 - 如果未指定,它将按顺序查找以下内容: - `php-version-file` 输入(如果存在) - `composer.lock` 文件和 `platform-overrides.php` 值 - `composer.json` 文件和 `config.platform.php` 值 - 如果 `composer.lock` 或 `composer.json` 文件位于您仓库的子目录中,请在 `COMPOSER_PROJECT_DIR` env 中指定子目录路径。 #### `php-version-file` (可选) - 指定包含您要设置的 PHP 版本的文件。 - 接受一个 `string`。例如 `'.phpenv-version'`。 - 有关支持的 PHP 版本,请参阅 [PHP 支持](#tada-php-support)。 - 默认情况下,使用 `.php-version` 文件。 - 该文件需要包含 PHP 版本作为其内容,或者遵循 asdf `.tool-versions` 格式。 - 如果未指定且未找到默认的 `.php-version` 文件,则设置最新的稳定 PHP 版本。 #### `extensions` (可选) - 指定您要添加或禁用的扩展。 - 接受 csv 格式的 `string`。例如 `mbstring, :opcache`。 - 接受 `none` 以禁用所有共享扩展。 - 以 `:` 为前缀的共享扩展将被禁用。 - 有关更多信息,请参阅 [PHP 扩展支持](#heavy_plus_sign-php-extension-support)。 #### `ini-file` (可选) - 指定基础 `php.ini` 文件。 - 接受 `production`、`development` 或 `none`。 - 默认情况下,使用生产环境 `php.ini` 文件。 #### `ini-values` (可选) - 指定您要添加到 `php.ini` 的值。 - 接受 csv 格式的 `string`。例如 `post_max_size=256M, max_execution_time=180`。 - 接受用引号包裹的包含逗号的 ini 值。例如 `xdebug.mode="develop,coverage"`。 #### `coverage` (可选) - 指定您要设置的代码覆盖率驱动程序。 - 接受 `xdebug`、`pcov` 或 `none`。 - 有关更多信息,请参阅 [覆盖率支持](#signal_strength-coverage-support)。 #### `tools` (可选) - 指定您要设置的工具。 - 接受 csv 格式的 `string`。例如:`phpunit, phpcs` - 有关支持的工具,请参阅 [工具支持](#wrench-tools-support)。 #### `github-token` (可选) - 指定用于认证的 GitHub token。 - 接受一个 `string`。 - 默认情况下,使用 GitHub Actions 提供的 `GITHUB_TOKEN` secret。 - 对于 GitHub Enterprise 用户,建议使用 Personal Access Token (PAT)。 ### 输出参数 #### `php-version` 在 GitHub Actions 中,您可以为 `setup-php` 步骤分配一个 `id`,您可以在后续步骤中使用该 id 获取输出。 - 以 semver 格式提供 PHP 版本。 ``` - name: Setup PHP id: setup-php uses: shivammathur/setup-php@v2 with: php-version: '8.5' - name: Print PHP version run: echo ${{ steps.setup-php.outputs.php-version }} ``` ### 标志 #### `fail-fast` (可选) - 指定如果扩展或工具设置失败,则将工作流标记为失败。 - 这会将默认模式从优雅警告更改为快速失败。 - 默认设置为 `false`。 - 接受 `true` 和 `false`。 #### `phpts` (可选) - 指定设置 PHP 的线程安全构建。 - 接受 `nts` 表示非线程安全,`zts` 或 `ts` 表示线程安全。 - 默认设置为 `nts`。 - 有关更多信息,请参阅 [线程安全设置](#thread-safe-setup)。 #### `update` (可选) - 指定将 runner 上的 PHP 更新到最新的补丁版本。 - 接受 `true` 和 `false`。 - 默认设置为 `false`。 - 有关更多信息,请参阅 [强制更新设置](#force-update-setup)。 有关更多信息,请参阅下文。 ### 基本设置 ``` steps: - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '8.5' extensions: mbstring, intl ini-values: post_max_size=256M, max_execution_time=180 coverage: xdebug tools: php-cs-fixer, phpunit ``` ### 矩阵设置 ``` jobs: run: runs-on: ${{ matrix.operating-system }} strategy: matrix: operating-system: ['ubuntu-latest', 'windows-latest', 'macos-latest'] php-versions: ['8.2', '8.3', '8.4', '8.5'] phpunit-versions: ['latest'] include: - operating-system: 'ubuntu-latest' php-versions: '8.1' phpunit-versions: 10 steps: - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php-versions }} extensions: mbstring, intl ini-values: post_max_size=256M, max_execution_time=180 coverage: xdebug tools: php-cs-fixer, phpunit:${{ matrix.phpunit-versions }} ``` ### Nightly 构建设置 - 这些 PHP 版本目前处于活跃开发中,可能包含错误和重大更改。 - 某些用户空间扩展目前可能不支持这些版本。 ``` steps: - name: Setup nightly PHP uses: shivammathur/setup-php@v2 with: php-version: '8.6' extensions: mbstring ini-values: post_max_size=256M, max_execution_time=180 coverage: xdebug tools: php-cs-fixer, phpunit ``` ### Debug 构建设置 - 默认设置不带调试符号的 PHP 生产发布构建。 - 您可以使用 `debug` 环境变量为 PHP 5.6 及更高版本设置带有调试符号的构建。 ``` steps: - name: Setup PHP with debugging symbols uses: shivammathur/setup-php@v2 with: php-version: '8.5' env: debug: true # specify true or false ``` ### 线程安全设置 - 默认设置 `NTS` 版本。 ``` jobs: run: runs-on: [ubuntu-latest, windows-latest, macos-latest] name: Setup PHP TS steps: - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '8.5' env: phpts: ts # specify ts or nts ``` ### 强制更新设置 - 预装的 PHP 版本默认不会更新到最新的补丁发布版本。 - 如果 Ubuntu GitHub 环境中缺少 `ppa:ondrej/php`,PHP 版本将更新到最新的补丁发布版本。 - 您可以将 `update` 环境变量指定为 `true` 以更新到最新版本。 ``` - name: Setup PHP with latest versions uses: shivammathur/setup-php@v2 with: php-version: '8.5' env: update: true # specify true or false ``` ### 详细模式设置 要调试任何问题,您可以使用 `verbose` 标签代替 `v2`。 ``` - name: Setup PHP with logs uses: shivammathur/setup-php@verbose with: php-version: '8.5' ``` ### 多架构设置 - `setup-php` 在 `Ubuntu` 和 `Debian` 上支持多种架构的 `PHP 5.6` 到 `PHP 8.5`。 - 为此,您可以使用 `shivammathur/node` 镜像作为容器。这些镜像安装了兼容的 `Nodejs` 和 `PHP` 供 `setup-php` 使用。 ``` jobs: run: runs-on: ${{ matrix.os }} container: shivammathur/node:php-${{ matrix.php-versions }}-24.04-${{ matrix.arch }} strategy: matrix: arch: ["amd64", "arm64v8"] php-versions: [8.4, 8.5] include: - arch: "amd64" os: "ubuntu-24.04" - arch: "arm64v8" os: "ubuntu-24.04-arm" steps: - name: Install PHP uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php-versions }} ``` ### 自托管设置 - 要设置容器化的自托管 runner,请根据您的基础操作系统参考以下指南。 - [Linux](https://github.com/shivammathur/setup-php/wiki/Dockerized-self-hosted-runner-on-Linux) - [Windows](https://github.com/shivammathur/setup-php/wiki/Dockerized-self-hosted-runner-on-Windows) - 要直接在宿主操作系统或虚拟机上设置 runner,请在设置自托管 runner 之前遵循此[需求指南](https://github.com/shivammathur/setup-php/wiki/Requirements-for-self-hosted-runners "Requirements guide for self-hosted runner to run setup-php")。 - 如果您的工作流使用[服务容器](https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idservices "GitHub Actions Services"),请在 Linux 主机或 Linux 虚拟机上设置 runner。GitHub Actions 不支持 Linux 上的嵌套虚拟化,因此服务将无法在 Docker 容器中工作。 建议为自托管环境指定值为 `self-hosted` 的环境变量 `runner`。 ``` jobs: run: runs-on: self-hosted strategy: matrix: php-versions: ['5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3', '8.4', '8.5'] name: PHP ${{ matrix.php-versions }} steps: - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php-versions }} env: runner: self-hosted ``` ### 本地测试设置 ``` jobs: run: runs-on: ubuntu-latest steps: - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '8.5' ``` 使用 `act` 和 [`shivammathur/node`](https://github.com/shivammathur/node-docker "Docker image to run setup-php") docker 镜像在本地运行工作流。 选择与您工作流中 `runs-on` 属性匹配的镜像标签。例如,如果您在工作流中使用 `ubuntu-22.04`,请运行 `act -P ubuntu-22.04=shivammathur/node:22.04`。 ``` # 对于 runs-on: ubuntu-latest act -P ubuntu-latest=shivammathur/node:latest # 对于 runs-on: ubuntu-24.04 act -P ubuntu-24.04=shivammathur/node:24.04 # 对于 runs-on: ubuntu-22.04 act -P ubuntu-22.04=shivammathur/node:22.04 ``` ### JIT 配置 - 要启用 JIT,请通过设置 `opcache.enable_cli=1` 在 cli 模式下启用 `opcache`。 - JIT 与 `Xdebug`、`PCOV` 以及其他覆盖 `zend_execute_ex` 函数的扩展冲突,因此如果添加了此类扩展,请设置 `coverage: none` 并禁用它们。 - 默认情况下,设置 `opcache.jit=1235` 和 `opcache.jit_buffer_size=256M`(在 ARM 环境中为 `opcache.jit_buffer_size=128M`),可以使用 `ini-values` 输入更改这些值。 - 有关 JIT 相关指令的详细信息,请参阅 [`PHP 官方文档`](https://www.php.net/manual/en/opcache.configuration.php#ini.opcache.jit "opcache.jit documentation")。 例如,要在 `tracing` 模式下启用缓冲区大小为 `64 MB` 的 JIT。 ``` - name: Setup PHP with JIT in tracing mode uses: shivammathur/setup-php@v2 with: php-version: '8.5' coverage: none ini-values: opcache.enable_cli=1, opcache.jit=tracing, opcache.jit_buffer_size=64M ``` ### 缓存扩展 您可以使用 `shivammathur/cache-extensions` 和 `action/cache` GitHub Actions 缓存 PHP 扩展。设置耗时很长的扩展在缓存后,可在下一次工作流运行中直接使用并启用。这减少了工作流执行时间。 有关详细信息,请参阅 [`shivammathur/cache-extensions`](https://github.com/shivammathur/cache-extensions "GitHub Action to cache php extensions")。 ### 缓存 Composer 依赖 如果您的项目使用 composer,您可以持久化 composer 的内部缓存目录。缓存的依赖项将直接加载,而不是在安装时下载。缓存的文件可在各次检查运行中使用,并将减少工作流执行时间。 ``` - name: Get composer cache directory id: composer-cache run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT - name: Cache dependencies uses: actions/cache@v4 with: path: ${{ steps.composer-cache.outputs.dir }} key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} restore-keys: ${{ runner.os }}-composer- - name: Install dependencies run: composer install --prefer-dist ``` ``` key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} ``` - 如果您支持一定范围的 `composer` 依赖项并使用 `-lowest` 和 `prefer-stable` 选项,您可以将它们存储在矩阵中并将它们添加到键中。 ``` key: ${{ runner.os }}-composer-${{ matrix.prefer }}-${{ hashFiles('**/composer.lock') }} restore-keys: ${{ runner.os }}-composer-${{ matrix.prefer }}- ``` ### GitHub Composer 认证 默认情况下,setup-php 使用为每次工作流运行生成的 `GITHUB_TOKEN` secret。如果您想改用 Personal Access Token (PAT),可以设置 `github-token` 输入。 ``` - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '8.5' github-token: ${{ secrets.YOUR_PAT_TOKEN }} ``` `COMPOSER_TOKEN` 和 `GITHUB_TOKEN` 环境变量已被弃用,取而代之的是 `github-token` 输入,并将在下一个主要版本中删除。 对于 GitHub Enterprise 用户,`github-token` 输入不会默认为 `GITHUB_TOKEN` secret。因此,建议将 `github-token` 输入设置为 Personal Access Token (PAT)。 ### Private Packagist 认证 如果您使用 Private Packagist 管理私有 composer 依赖项,可以设置 `PACKAGIST_TOKEN` 环境变量进行认证。 ``` - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '8.5' env: PACKAGIST_TOKEN: ${{ secrets.PACKAGIST_TOKEN }} ``` ### 手动 Composer 认证 除了 GitHub 或 Private Packagist 之外,如果您想对托管在其他地方的私有仓库进行认证,可以设置 `COMPOSER_AUTH_JSON` 环境变量,其中包含 json 格式的认证方法和凭据。 有关更多详细信息,请参阅 [`composer 文档`](https://getcomposer.org/doc/articles/authentication-for-private-packages.md "composer documentation") 中的认证部分。 ``` - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '8.5' env: COMPOSER_AUTH_JSON: | { "http-basic": { "example.org": { "username": "${{ secrets.EXAMPLE_ORG_USERNAME }}", "password": "${{ secrets.EXAMPLE_ORG_PASSWORD }}" } } } ``` ### 内联 PHP 脚本 如果您必须在工作流中运行多行 PHP 代码,无需将其保存到文件即可轻松完成。 将代码放在步骤的 run 属性中,并将 shell 指定为 `php {0}`。 ``` - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '8.5' - name: Run PHP code shell: php {0} run: | Contributors of setup-php and related projects

## :sparkling_heart: 支持本项目 这些公司慷慨地向 setup-php 提供产品和服务,以帮助本项目的开发。

JetBrains JetBrains           Cloudflare Cloudflare           Mac Stadium Mac Stadium           Digitalocean Digitalocean

许多用户和组织通过 [GitHub Sponsors](https://github.com/sponsors/shivammathur) 支持 setup-php。 Sponsor shivammathur - 如果您使用 setup-php,请考虑为项目加星并分享它。 - 如果您写博客,请分享您使用 `setup-php` 的经验。 - 如果您对赞助 setup-php 有任何疑问,请[联系我们](mailto:contact@setup-php.com)。 ## :package: 依赖 - [Node.js dependencies](https://github.com/shivammathur/setup-php/network/dependencies "Node.js dependencies") - [aaronparker/VcRedist](https://github.com/aaronparker/VcRedist "VcRedist PowerShell package") - [mlocati/powershell-phpmanager](https://github.com/mlocati/powershell-phpmanager "Package to handle PHP on windows") - [ppa:ondrej/php](https://launchpad.net/~ondrej/+archive/ubuntu/php "Packaging active PHP packages") - [shivammathur/cache-extensions](https://github.com/shivammathur/cache-extensions "GitHub action to help with caching PHP extensions") - [shivammathur/composer-cache](https://github.com/shivammathur/composer-cache "Cache composer releases") - [shivammathur/homebrew-extensions](https://github.com/shivammathur/homebrew-extensions "Tap for PHP extensions on MacOS") - [shivammathur/homebrew-php](https://github.com/shivammathur/homebrew-php "Tap for PHP builds on MacOS") - [shivammathur/icu-intl](https://github.com/shivammathur/icu-intl "icu4c and php-intl builds") - [shivammathur/php-builder](https://github.com/shivammathur/php-builder "Nightly PHP package for Ubuntu") - [shivammathur/php-builder-windows](https://github.com/shivammathur/php-builder-windows "Nightly PHP package for Windows") - [shivammathur/php-ubuntu](https://github.com/shivammathur/php-ubuntu "Cache stable PHP Packages for Ubuntu") - [shivammathur/php5-darwin](https://github.com/shivammathur/php5-darwin "Scripts to set up PHP5 versions on darwin") - [shivammathur/php5-ubuntu](https://github.com/shivammathur/php5-ubuntu "Scripts to set up PHP5 versions on ubuntu") ## :bookmark_tabs: 延伸阅读 - [关于 GitHub Actions](https://github.com/features/actions "GitHub Actions") - [GitHub Actions 语法](https://help.github.com/en/articles/workflow-syntax-for-github-actions "GitHub Actions Syntax") - [其他精选 Actions](https://github.com/sdras/awesome-actions "List of Awesome GitHub Actions")
标签:Composer, DNS解析, GitHub Actions, Laravel, MITM代理, OpenVAS, PHP, PHPUnit, Symfony, Xdebug, 代码覆盖率, 开发环境, 开源框架, 开源项目, 持续集成, 数据集, 文档安全, 测试工具, 环境配置, 网络调试, 自动化, 自动化攻击, 自动笔记, 软件供应链