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
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
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
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:
- Specific version
- lowest / highest
- nightly
- pre-installed
- d.x format
- Matrix
Provide a version string such as
'8.5' or '8.4':Auto-detection from project files
Whenphp-version is not specified, setup-php looks for the PHP version in the following order:
- The
php-version-fileinput (if provided) - A
composer.lockfile — readsplatform-overrides.php - A
composer.jsonfile — readsconfig.platform.php
php-version-file input
Specify a file that contains the PHP version to use. By default, setup-php looks for a .php-version file:
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
Specifying8.6 (or nightly) installs a nightly build of PHP 8.6.0-dev compiled from the master branch:
Debug build
Production release builds without debugging symbols are installed by default. Set thedebug environment variable to true to install a build with debugging symbols for PHP 5.6 and above:
- Linux — debug info files in
/usr/lib/debug/.build-id, matching thebuild-idin the ELF section of PHP binaries - Windows —
.pdbfiles 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 thephpts environment variable to select a thread-safe (TS/ZTS) build:
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 overridezend_execute_ex - Optionally tune
opcache.jitandopcache.jit_buffer_size
opcache.jit=1235 and opcache.jit_buffer_size=256M (128M on ARM).
- Tracing mode
- Function mode
Enable JIT in tracing mode with a 64 MB buffer:
Refer to the official PHP opcache documentation for a full list of JIT directives and their values.