PHP 5.5 と PHP 7 / 8 の違い

PHP 5 は、2024 年 1 月 30 日にサポートが終了しました。既存の PHP 5 アプリケーションは引き続き実行され、トラフィックを受信します。ただし、サポート終了日の後は、ランタイムを使用するアプリケーションの再デプロイが App Engine によってブロックされることがあります。このページのガイドラインに従って、サポートされている最新バージョンの PHP に移行することをおすすめします。

このページでは、PHP 5.5 アプリを App Engine スタンダード環境の PHP 7 / 8 のランタイムに移行する方法について説明します。

PHP 5.5 と PHP 7 / 8 の互換性に関する問題

公式の PHP ドキュメントで PHP の各バージョンからの移行に関する情報が提供されています。

PHP 5.5 と PHP 7 / 8 の主な違い

以下に、App Engine スタンダード環境での PHP 5.5 と PHP 7 / 8 のランタイムの違いの概要を示します。

メモリ使用量の違い

第 2 世代のランタイムでは、第 1 世代のランタイムよりもメモリ使用量のベースラインが高くなります。これは、ベースイメージのバージョンの違いや、2 つの世代でのメモリ使用量の計算方法の違いなど、複数の要因によるものです。

第 2 世代のランタイムでは、アプリプロセスで使用されるものとメモリに動的にキャッシュされるアプリケーション ファイルの数の合計としてインスタンスのメモリ使用量が計算されます。メモリ使用量の多いアプリケーションで、メモリの上限を超えてインスタンスがシャットダウンしないようにするには、より多くのメモリを備えているインスタンス クラスにアップグレードします。

CPU 使用率の違い

第 2 世代のランタイムでは、インスタンスのコールド スタート時の CPU 使用率のベースラインが高くなります。アプリケーションのスケーリング構成によっては、CPU 使用率に基づいてスケーリングするようにアプリケーションを構成すると、インスタンス数が想定よりも多くなるなど、意図しない結果が生じることがあります。この問題を回避するには、アプリケーションのスケーリング構成をテストして、インスタンス数が許容範囲内であることを確認します。

リクエスト ヘッダーの違い

第 1 世代のランタイムでは、アンダースコア付きのリクエスト ヘッダー(X-Test-Foo_bar など)をアプリケーションに転送できます。第 2 世代のランタイムでは、ホスト アーキテクチャに Nginx が導入されています。この変更の結果、第 2 世代のランタイムはアンダースコア(_)付きのヘッダーを自動的に削除するように構成されています。アプリケーションでの問題を回避するため、アプリケーションのリクエスト ヘッダーにアンダースコアを使用しないでください。

app.yaml ファイルを移行する

アプリケーションのすべてのルーティングを処理するフロント コントローラを配置する必要があります。詳細については、アプリケーションの起動をご覧ください。

PHP 7 / 8 以降のランタイムでは、script ハンドラ要素をカスタマイズできません。すべてのトラフィックが entrypoint コマンドを使用して提供されるため、唯一の有効な値は auto です。静的でない URL のすべてのハンドラで script: auto を指定しないとデプロイは成功しません。

app.yaml 構成ファイルの一部の要素の動作が変更されました。

要素変更タイプ説明
entrypoint追加 必要に応じて、このフィールドでアプリの起動時に実行されるコマンドを指定します
threadsafe非推奨すべてのアプリケーションがスレッドセーフ(つまり、インスタンスが複数のリクエストを同時に処理できる)とみなされます。
api_version非推奨以前は必須でしたが、PHP 7 / 8 以降のランタイムでは必要ありません。
application_readable非推奨
builtins非推奨
libraries非推奨composer.json メタデータ ファイルを使用して、サードパーティの任意の依存関係をインストールできます。
handlers修正
  • script フィールドは省略可能で、指定できる値は auto だけです。ウェブ フレームワーク(LaravelSymfonySlim など)とアプリ内ルーティングを使用して、リクエストが特定のルートを取ったときにスクリプトを実行します。
  • login フィールドはサポートされていませんユーザー管理には Identity and Access Management(IAM)を使用します。

非推奨のフィールドのいずれかを使用すると、アプリのデプロイ時にエラーが発生します。

詳細については、app.yaml リファレンスをご覧ください。

緩和されたランタイムの制限

PHP 7 /8 のランタイムは、PHP 5.5 ランタイムに比べて制限が緩和されています。

詳細については、PHP 7 / 8 以降のランタイム環境のドキュメントをご覧ください。

App Engine の PHP SDK から移行する

ランタイム移行の労力と複雑さを軽減するため、App Engine スタンダード環境では PHP 7 / 8 以降のランタイムで多くのレガシー バンドル サービスと API にアクセスできます(Memcache など)。PHP 7 / 8 アプリは、App Engine SDK for PHP 7 / 8 を介してバンドル サービスの API を呼び出すことができ、PHP 5 ランタイムとほぼ同じ機能にアクセスできます。PHP 7 / 8 では、PHP 5 で使用可能なレガシー バンドル サービスすべてに、対応するサービスがあるわけではありません。PHP 7 / 8 で使用できるレガシー バンドル サービス API の完全なリストについては、レガシー バンドル サービス API リファレンス ドキュメントをご覧ください。

以前のバンドル サービスと同様の機能を備えた Google Cloud プロダクトを使用することもできます。これらの Google Cloud プロダクトには、慣用的な Google Cloud CLI クライアント ライブラリが用意されています。Google Cloud で個別のプロダクトとして提供されていない以前のバンドル サービス(検索など)については、サードパーティ プロバイダまたはその他の回避策を使用できます。バンドルされていないサービスへの移行については、バンドル サービスからの移行をご覧ください。

アプリケーションをローカルで実行する

アプリケーションをテストしてローカルで実行するには:

  1. App Engine スタンダード環境で利用可能な PHP 7 / 8 以降のランタイムの一つに対応する PHP のバージョンをローカルにインストールします。
  2. ウェブサーバーをインストールし、これを使用してアプリをローカルで提供します。

たとえば、次のコマンドを実行して HTTP サーバーを起動します。

php -S localhost:8080

その後、ウェブブラウザで http://localhost:8080 にアクセスしてアプリケーションを表示します。