PHP Buildpack on App Platform

App Platform is a Platform-as-a-Service (PaaS) offering that allows developers to publish code directly to DigitalOcean servers without worrying about the underlying infrastructure.


How App Platform Builds Images

App Platform supports two ways to build an image for your app: Cloud Native Buildpacks and Dockerfiles.

When you give App Platform access to your code, it defaults to using a Dockerfile if one is present in the root of the directory or specified in the app spec. Otherwise, App Platform checks your code to determine what language or framework it uses. If it supports the language or framework, it chooses an appropriate resource type and uses the proper buildpack to build the app and deploy a container.

heroku-buildpack-php is utilized as the buildpack for detecting and building your PHP applications.

PHP Applications using Buildpacks

App Platform looks for any of the following to detect a PHP application:

  • composer.json
  • index.php

Current Buildpack Version and Supported Runtimes

App Platform uses version 254 of the Heroku PHP Buildpack. The buildpack supports PHP runtime versions 7.4.x, 8.0.x, 8.1.x, 8.2.x and 8.3.x. If no version is specified in your app, App Platform defaults to using the latest PHP release (currently it is 8.3.9).

App Platform offers the v2 and v1 versions of the PHP buildpack. To start using PHP v2, we recommend upgrading your stack to Ubuntu-22 before upgrading to newer PHP buildpack versions. To see specific runtimes that are available for these versions, please look at our release notes.

The buildpack supports the following PHP runtime versions:

  • Ubuntu-22
    • 8.3.5 - 8.3.0
    • 8.2.18 - 8.2.1
    • 8.1.27 - 8.1.6

Specify a PHP Version

  • PHP versions 7.x and 8.x are supported. PHP 7.x will be used by default, unless a specific version is requested via composer.json by your app or a dependency. To configure the version used for your app, add a php dependency to composer.json like so:
    
        
            
  {
    "require": {
      "php": "^8.0.0"
    }
  }

        
    

Composer and Private Repositories

If your Composer configuration requires access to packages in private repositories, use the COMPOSER_AUTH environment variable to configure your authentication details. Composer automatically reads this variable when needed.

The value of the COMPOSER_AUTH variable is the same JSON structure found in Composer’s auth.json file. If you already have this file, you may extract the relevant portions, remove all new lines, and set the COMPOSER_AUTH value to the resulting single line of JSON.

See Authentication for Privately Hosted Packages and Repositories in the Composer docs for more details on the different authentication types available and the JSON needed to configure them.

Example

A commonly used authentication type is github-oauth . The JSON required to configure github-oauth is shown in the Composer documentation as:

{
    "github-oauth": {
        "github.com": "token"
    }
}

To use this on App Platform, first flatten the JSON into a single line, then substitute your GitHub personal access token for token:

COMPOSER_AUTH={"github-oauth":{"github.com": "github_pat_11AABJX..."}}

Multiple authentication types and accounts can be set simultaneously in a single COMPOSER_AUTH variable. For more details on how to set and manage environment variables on App Platform, see How to Use Environment Variables:

Use and encrypt environment variables in App Platform.

Enable PHP Extensions

App Platform does not enable PHP extensions by default, but you can enable them by requiring them in your app’s composer.json file.

For example, to enable the GD extension, add the ext-gd field to your composer.json file:

    
        
            
{
    "require": {
        "ext-gd": "*"
    }
}

        
    

The asterisk (*) indicates that your application can use any version of the GD extension.

Once you’ve updated the composer.json file, update your app’s dependencies:

composer update

Once you’ve updated your app’s dependencies, push the changes to your app’s repository. This triggers the app to redeploy with the new extensions.

For a list of available extensions, see Heroku’s documentation.

Limits

  • The PHP buildpack supports Composer versions 1.x and 2.x. App Platform uses the version of Composer that generated the composer.lock file. Generally, you can update your project by running composer update --lock using Composer 2.

  • You cannot use the request_slowlog_timeout directive from the PHP FastCGI Process Manager (FPM) with App Platform. We recommend using log forwarding to capture your app’s logs and query them based on request response times.