Skip to main content

What is setup-php?

setup-php is a GitHub Action that provides a cross-platform interface to configure PHP environments in your CI/CD workflows. It supports Ubuntu, Windows, and macOS on both GitHub-hosted and self-hosted runners, and handles the differences between platforms automatically. With a single step in your workflow, you can:
  • Install a specific PHP version (5.3 through 8.6, including nightly builds)
  • Add PHP extensions from packages, PECL, or git repositories
  • Configure php.ini values
  • Set up code coverage drivers (Xdebug or PCOV)
  • Install popular tools like Composer, PHPUnit, PHPStan, and 50+ more
- 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

OS/Platform support

Both GitHub-hosted and self-hosted runners are supported on the following operating systems.

GitHub-hosted runners

Virtual environmentArchYAML 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

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 on the runner, 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 support

setup-php supports PHP 5.3 through 8.6 across all supported platforms, with some variation by runner type.
  • GitHub-hosted runners (non-ARM): PHP 5.3 to PHP 8.6
  • GitHub-hosted macOS ARM64 (macos-14): PHP 5.6 to PHP 8.6
  • Self-hosted runners: PHP 5.6 to PHP 8.6
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 in the php-version input installs a nightly build of PHP 8.6.0-dev from the master branch of PHP. These builds may contain bugs and breaking changes.

Explore setup-php

Quickstart

Get PHP configured in your GitHub Actions workflow in minutes with a complete working example.

Configuration

Full reference for all inputs, outputs, and environment flags.

Extensions

Install PHP extensions from packages, PECL, or git repositories.

Tools

Set up 50+ PHP tools globally, including PHPUnit, PHPStan, and Composer.

Build docs developers (and LLMs) love