Differences between PHP 5.5 and PHP 7/8

PHP 5 has reached end of support on January 30, 2024. Your existing PHP 5 applications will continue to run and receive traffic. However, App Engine might block re-deployment of applications that use runtimes after their end of support date. We recommend that you migrate to the latest supported version of PHP by using the guidelines in this page.

This page covers how to migrate your PHP 5.5 app to the PHP 7/8 runtime on the App Engine standard environment.

Compatibility issues between PHP 5.5 and PHP 7/8

The official PHP documentation provides information on migrating from different PHP versions:

Key differences between PHP 5.5 and PHP 7/8

The following is a summary of the differences between the PHP 5.5 and PHP 7/8 runtimes on the App Engine standard environment:

Memory usage differences

Second-generation runtimes see a higher baseline of memory usage compared to first-generation runtimes. This is due to multiple factors, such as different base image versions, and differences in how the two generations calculate memory usage.

Second-generation runtimes calculate instance memory usage as the sum of what an application process uses, and the number of application files dynamically cached in memory. To avoid memory-intensive applications from experiencing instance shutdowns due to exceeding memory limits, upgrade to a larger instance class with more memory.

CPU usage differences

Second-generation runtimes can see a higher baseline of CPU usage upon instance cold-start. Depending on an application's scaling configuration, this might have unintended side effects, such as, a higher instance count than anticipated if an application is configured to scale based on CPU utilization. To avoid this issue, review and test application scaling configurations to ensure the number of instances are acceptable.

Request header differences

First-generation runtimes allow request headers with underscores (e.g. X-Test-Foo_bar) to be forwarded to the application. Second-generation runtimes introduces Nginx into the host architecture. As a result of this change, second-generation runtimes are configured to automatically remove headers with underscores (_). To prevent application issues, avoid using underscores in application request headers.

Migrating your app.yaml file

You must place a front controller to handle all routing in your application. For more information, see Application startup.

The PHP 7/8 runtimes do not allow the script handler element to be customized. The only valid value is auto, because all traffic is served using the entrypoint command. All non-static URL handlers must include script: auto to deploy successfully.

The behavior of some elements in the app.yaml configuration file has been modified:

ElementChange typeDescription
entrypointAdded Optionally, use this field to specify the command that will run when your app starts.
threadsafeDeprecatedAll applications are presumed to be threadsafe, meaning an instance can handle multiple requests at the same time.
api_versionDeprecatedPreviously required but not needed in the PHP 7/8 runtimes.
application_readableDeprecated
builtinsDeprecated
librariesDeprecatedArbitrary third party dependencies can be installed using a composer.json metadata file.
handlersModified
  • The script field is optional and the only accepted value is auto. Use a web framework (like Laravel, Symfony, Slim, or a similar option) with in-app routing to execute a script when a request hits a specific route
  • The login field is not supported. Use Identity and Access Management (IAM) for user management.

If you use of any of the deprecated fields, there will be an error on app deployment.

For more information, see the app.yaml reference.

Reduced runtime restrictions

The PHP 7/8 runtimes have fewer restrictions compared to the PHP 5.5 runtime.

For more information, see the PHP 7/8 runtime environment documentation.

Migrating from the App Engine PHP SDK

To reduce runtime migration effort and complexity, the App Engine standard environment allows you to access many of legacy bundled services and APIs in the PHP 7/8 runtime, such as Memcache. Your PHP 7/8 app can call the bundled services APIs through the App Engine SDK for PHP 7/8, and access most of the same functionality as on the PHP 5 runtime. Not all the legacy bundled services available for PHP 5 have a corresponding service in PHP 7/8. For the full list of legacy bundled services APIs available for PHP 7/8, see the legacy bundled services API references documentation.

You also have the option to use Google Cloud products that offer similar functionality as the legacy bundled services. These Google Cloud products provide idiomatic Google Cloud CLI client library. For the legacy bundled services that are not available as separate products in Google Cloud, such as search, you can use third-party providers or other workarounds. To learn more about migrating to unbundled services, see Migrating from bundled services.

Running your application locally

To test your application and run it locally:

  1. Locally install a version of PHP that corresponds to one of the PHP 7/8 runtimes available on the App Engine standard environment.
  2. Install a web server and use this to serve your app locally.

For example, start the HTTP server by running the following command:

php -S localhost:8080

Then, view your application in your web browser at http://localhost:8080.