Skip to main content
The php-version input controls which PHP version is installed on your runner. setup-php supports PHP 5.3 through 8.6 across GitHub-hosted and self-hosted runners on Ubuntu, Windows, and macOS.

Supported PHP versions

PHP versionStabilityRelease supportRunner support
5.3StableEnd of lifeGitHub-hosted
5.4StableEnd of lifeGitHub-hosted
5.5StableEnd of lifeGitHub-hosted
5.6StableEnd of lifeGitHub-hosted, self-hosted
7.0StableEnd of lifeGitHub-hosted, self-hosted
7.1StableEnd of lifeGitHub-hosted, self-hosted
7.2StableEnd of lifeGitHub-hosted, self-hosted
7.3StableEnd of lifeGitHub-hosted, self-hosted
7.4StableEnd of lifeGitHub-hosted, self-hosted
8.0StableEnd of lifeGitHub-hosted, self-hosted
8.1StableEnd of lifeGitHub-hosted, self-hosted
8.2StableSecurity fixes onlyGitHub-hosted, self-hosted
8.3StableSecurity fixes onlyGitHub-hosted, self-hosted
8.4StableActiveGitHub-hosted, self-hosted
8.5StableActiveGitHub-hosted, self-hosted
8.6NightlyIn developmentGitHub-hosted, self-hosted
Specifying 8.6 installs a nightly build of PHP 8.6.0-dev from the master branch of PHP. See the nightly build section below for details.

Platform support

GitHub-hosted runners

Virtual environmentArchitectureYAML workflow labelPre-installed PHP
Ubuntu 24.04x86_64ubuntu-latest or ubuntu-24.04PHP 8.3
Ubuntu 22.04x86_64ubuntu-22.04PHP 8.1
Ubuntu 24.04aarch64ubuntu-24.04-armPHP 8.3
Ubuntu 22.04aarch64ubuntu-22.04-armPHP 8.1
Windows Server 2025x64windows-2025PHP 8.5
Windows Server 2022x64windows-latest or windows-2022PHP 8.5
macOS Tahoe 26.xarm64macos-26
macOS Sequoia 15.xarm64macos-latest or macos-15
macOS Sonoma 14.xarm64macos-14
macOS Tahoe 26.xx86_64macos-26-intelPHP 8.5
macOS Sequoia 15.xx86_64macos-15-intelPHP 8.5
PHP 5.3–5.5 are only available on GitHub-hosted runners, not self-hosted runners. PHP 5.6–8.6 are supported on both. On GitHub-hosted macOS ARM64 runners (e.g. macos-14), only PHP 5.6 and above are supported.

Self-hosted runners

Host OS / virtual environmentYAML workflow label
Ubuntu 24.04self-hosted or Linux
Ubuntu 22.04self-hosted or Linux
Debian 13self-hosted or Linux
Debian 12self-hosted or Linux
Debian 11self-hosted or Linux
Windows 7 and newerself-hosted or Windows
Windows Server 2012 R2 and newerself-hosted or Windows
macOS Tahoe 26.x x86_64/arm64self-hosted or macOS
macOS Sequoia 15.x x86_64/arm64self-hosted or macOS
macOS Sonoma 14.x x86_64/arm64self-hosted or macOS
If the requested PHP version is pre-installed, setup-php switches to it; otherwise it installs the requested version. Operating systems based on the supported Ubuntu and Debian versions are also supported on a best-effort basis.

php-version input options

The php-version input accepts several formats:
Provide a version string such as '8.5' or '8.4':
- name: Setup PHP
  uses: shivammathur/setup-php@v2
  with:
    php-version: '8.5'

Auto-detection from project files

When php-version is not specified, setup-php looks for the PHP version in the following order:
  1. The php-version-file input (if provided)
  2. A composer.lock file — reads platform-overrides.php
  3. A composer.json file — reads config.platform.php
If none of these are present, the latest stable PHP version is installed.
If your composer.lock or composer.json is in a subdirectory, set the COMPOSER_PROJECT_DIR environment variable to the subdirectory path.

php-version-file input

Specify a file that contains the PHP version to use. By default, setup-php looks for a .php-version file:
- name: Setup PHP from version file
  uses: shivammathur/setup-php@v2
  with:
    php-version-file: '.phpenv-version'
The file must either contain just the PHP version string (e.g. 8.5) or follow the asdf .tool-versions format. If the default .php-version file is not found and php-version-file is not set, the latest stable PHP version is installed.

Special builds

Nightly build

Specifying 8.6 (or nightly) installs a nightly build of PHP 8.6.0-dev compiled from the master branch:
- name: Setup nightly PHP
  uses: shivammathur/setup-php@v2
  with:
    php-version: '8.6'
    extensions: mbstring
    coverage: xdebug
Nightly PHP versions are in active development and may contain bugs or breaking changes. Some user-space extensions may not yet support these versions.

Debug build

Production release builds without debugging symbols are installed by default. Set the debug environment variable to true to install a build with debugging symbols for PHP 5.6 and above:
- name: Setup PHP with debug symbols
  uses: shivammathur/setup-php@v2
  with:
    php-version: '8.5'
  env:
    debug: true
Debug symbol locations by platform:
  • Linux — debug info files in /usr/lib/debug/.build-id, matching the build-id in the ELF section of PHP binaries
  • Windows.pdb files in the PHP installation directory
  • macOS — debug symbols compiled directly into the binaries

Thread-safe build

Non-thread-safe (NTS) PHP is installed by default. Use the phpts environment variable to select a thread-safe (TS/ZTS) build:
- name: Setup thread-safe PHP
  uses: shivammathur/setup-php@v2
  with:
    php-version: '8.5'
  env:
    phpts: ts   # ts or zts for thread-safe, nts for non-thread-safe

JIT configuration

PHP 8.0 and above support Just-in-Time (JIT) compilation. To enable JIT:
  • Enable opcache in CLI mode with opcache.enable_cli=1
  • Set coverage: none — JIT conflicts with Xdebug, PCOV, and other extensions that override zend_execute_ex
  • Optionally tune opcache.jit and opcache.jit_buffer_size
By default, when JIT is enabled, setup-php sets opcache.jit=1235 and opcache.jit_buffer_size=256M (128M on ARM).
Enable JIT in tracing mode with a 64 MB buffer:
- name: Setup PHP with JIT (tracing)
  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
Refer to the official PHP opcache documentation for a full list of JIT directives and their values.

Build docs developers (and LLMs) love