PHP ランタイムは、アプリケーション コードと依存関係をインストールして、フレキシブル環境でそのアプリケーションを実行する役割を果たすソフトウェア スタックです。
バージョン
7.4
以降は Buildpack を使用してビルドされているため、app.yaml
ファイルでオペレーティング システムを選択する必要があります。たとえば、PHP 8.3 を使用するには、オペレーティング システムとして Ubuntu 22 を指定する必要があります。バージョン
7.3
以前は Docker を使用してビルドされています。
サポートされている PHP バージョンと対応する Ubuntu バージョンの完全なリストについては、ランタイム サポート スケジュールをご覧ください。
PHP のバージョンを選択する
新しいランタイム バージョン
PHP ランタイム バージョン 7.4 以降の場合は、次のことを行う必要があります。
app.yaml
ファイルにruntime_config
とoperating_system
の設定を追加して、オペレーティング システムを指定します。アプリケーションのドキュメント ルートを
app.yaml
ファイルで宣言します。runtime: php env: flex runtime_config: operating_system: "ubuntu22" document_root: .
ドキュメント ルートとしてプロジェクトのルート(
.
) ディレクトリを指定できますが、document_root
設定にはサブディレクトリを使用することをおすすめします。PHP バージョン 7.4 以降の場合、ソースコードはルート ディレクトリ(
/
)ではなく/workspace
ディレクトリにあります。構成をオーバーライドすると、NGINX
またはsupervisor
プロセスはこのディレクトリ内の構成ファイルを参照します。対応する参照を更新するには、次のことを行う必要があります。- NGINX 構成内の
include
ステートメントを、/etc/nginx
ではなく/workspace
を基準とした相対値に更新します。 gzip_params
などの一部のファイルは含まれません。これらのファイルを参照するには、独自のファイルを配置するか、GitHub からコピーします。mime.types
やfastcgi_params
などのファイルは/etc/nginx
ディレクトリにあります。nginx-plus-module-ndk
などの一部の NGINX モジュールはインストールされません。$docroot
値を設定するか、NGINX
構成ファイルに値を手動で追加します。
- NGINX 構成内の
gcloud CLI
バージョン 420.0.0 以降をインストールします。CLI ツールを更新するには、gcloud components update
コマンドを実行します。インストールされているバージョンを表示するには、gcloud version
コマンドを実行します。
必要に応じて、次の方法でランタイムのバージョンを指定できます。
runtime_version
設定をapp.yaml
に含める。runtime_version
の設定が指定されていない場合は、デフォルトで最新の PHP バージョンが使用されます。次に例を示します。Ubuntu 22 で PHP 8.3 を指定するには:
runtime: php env: flex runtime_config: operating_system: "ubuntu22" runtime_version: "8.3" document_root: .
Ubuntu 22 でサポートされている最新の PHP バージョンを指定するには:
runtime: php env: flex runtime_config: operating_system: "ubuntu22" document_root: .
composer.json
ファイルに PHP バージョンを含めます。{ "require": { "php": "8.3.*" } }
詳細については、app.yaml
のリファレンスをご覧ください。
以前のランタイム バージョン
PHP バージョン 7.3 以前の場合は、次のことを行う必要があります。
アプリケーションにドキュメント ルートを宣言します。これは
app.yaml
ファイルで行うことができます。runtime: php env: flex api_version: 1 runtime_config: document_root: .
ドキュメント ルートとしてプロジェクトのルート(
.
) ディレクトリを指定できますが、document_root
設定にはサブディレクトリを使用することをおすすめします。PHP の新しいバージョンが利用可能になったときに、アプリケーションが自動的にアップグレードされないように、
composer.json
ファイルに PHP のバージョンを指定します。{ "require": { "php": "7.3.*" } }
PHP 7.3 は Ubuntu 16.04 に基づいています。
NGINX をカスタマイズする
カスタム構成ファイルを定義するには、次のようにします。
v7.4 以降
プロジェクトのルート ディレクトリに nginx-app.conf
ファイルを含めます。
デフォルトでは、フレームワーク フロント コントローラは index.php
ファイルを使用します。プロジェクトでこの設定の変更が必要になる場合もあります。たとえば、Symfony フレームワークは index.php
ではなく app.php
を使用します。ファイル名は app.yaml
ファイルの runtime_config
セクションで変更できます。
runtime: php
env: flex
runtime_config:
operating_system: "ubuntu22"
document_root: .
front_controller_file: app.php
v7.3 以前
nginx-app.conf
構成ファイルは、メインの NGINX
構成ファイルのサーバー セクションに含まれています。たとえば、デフォルト構成の php-app.conf
ファイルには次のものが含まれます。
location / {
# try to serve files directly, fallback to the front controller
try_files $uri /$front_controller_file$is_args$args;
}
カスタム構成ファイルを定義するには、プロジェクトのルート ディレクトリに nginx-app.conf
ファイルを作成します。ランタイムでは、指定したファイルでデフォルトのファイルがオーバーライドされます。
デフォルトでは、フレームワーク フロント コントローラは index.php
ファイルを使用します。プロジェクトでこの設定の変更が必要になる場合もあります。たとえば、Symfony フレームワークは index.php
ではなく app.php
を使用します。ファイル名は app.yaml
ファイルの runtime_config
セクションで変更できます。
runtime: php
env: flex
runtime_config:
document_root: .
front_controller_file: app.php
OPcache
PHP バージョン 7.3 以前では OPcache がコンパイルされ、デフォルトで有効になっています。PHP 7.4 以降では、php.ini
ファイルで有効にする必要があります。OPcache の構成方法については、公式のドキュメントをご覧ください。
OPcache を無効にするには、次の行を使用してファイル php.ini
を作成または編集します。
opcache.enable=0
依存関係
ランタイムは、アプリケーションの起動前にアプリケーションのソース ディレクトリで composer.json
ファイルを探し、composer
を使用して依存関係をインストールします。パッケージの宣言と管理の詳細については、PHP ライブラリの使用をご覧ください。
PHP 拡張機能の使用
システムに次の PHP 拡張機能がインストールされ、有効になっています。
v7.4 以降
- BCMath
- Bzip2
- Calendar
- ctype
- cURL
- DBA
- DOM
- Enchant
- EXIF
- Fileinfo
- Filter
- FTP
- GD
- Gettext
- GMP
- iconv
- Intl
- LDAP
- libxml
- mbstring
- MySQLi
- MySQLND
- OpenSSL
- pcntl
- PDO
- PDO_MYSQL
- PDO_PGSQL
- PDO_SQLITE
- PGSQL
- Phar
- POSIX
- Session
- Shmop
- SimpleXML
- SOAP
- Sockets
- SQLite3
- Tidy
- Tokenizer
- XML
- XMLReader
- XMLWriter
- XSL
- zend_test
- Zip(Ubuntu 22 のみ)
- Zlib
php.ini
ファイルを使用すると、次の拡張機能を有効にできます。
- gRPC
- ImageMagick
- Mailparse
- Memcached
- mongodb
- OpenCensus
- OpenTelemetry(PHP バージョン 8.1 以降)
- OPcache
- protobuf
- Redis
v7.3 以前
- APCu
- Bzip2
- cURL
- FPM
- GMP
- mbstring
- mcrypt
- libsodium
- Memcached
- MySQL(PDO)(mysqlnd を使用)
- MySQLi(mysqlnd を使用)
- OPcache
- OpenSSL
- pcntl
- PostgreSQL
- PostgreSQL(PDO)
- Readline
- recode
- sem
- Sockets
- Zip
- Zlib
次の PHP 拡張機能はデフォルトで無効になっています。php.ini
ファイルの使用で、次の拡張機能を有効にできます。
- amqp
- APM(7.0+)
- BCMath
- Bitset
- Calendar
- Cassandra
- couchbase(7.0 以上)
- ds(7.0 以上)
- eio
- ev
- event
- Exif
- FTP
- GD(PNG、JPEG、FreeType サポート付き)
- gettext
- gRPC
- hprose
- igbinary
- intl
- ImageMagick
- jsond
- krb5
- lua(7.0 以上)
- LZF
- memprof
- mongodb
- MySQL(5.6)
- oauth
- OpenCensus
- PCNTL
- Phalcon(5.6、7.0)
- pq
- protobuf
- rdkafka
- Redis
- SeasLog
- Shmop
- SOAP
- SQLite3
- SQLite(PDO)
- stomp
- swoole
- sync
- tcpwrap
- timezonedb
- v8js(7.0 以上)
- vips(7.0 以上)
- XMLRPC
- XSL
- yaconf(7.0 以上)
- yaf
- yaml
拡張機能を有効にするには、アプリケーションのルートに extension
ディレクティブを指定して php.ini
ファイルを追加します。
; Enable the Redis extension
extension=redis.so
; Enable the OpenTelemetry extension (must be in an opentelemetry section)
[opentelemetry]
extension=opentelemetry.so
また、composer.json
に require
を追加して拡張機能を有効にすることもできます。
{
"require": {
"ext-redis": "*"
}
}
これらのパッケージでは、最も一般的な PHP 拡張機能をインストールできます。アプリケーションで追加のオペレーティング システムレベルの依存関係が必要な場合は、PHP ランタイムを拡張するか、カスタム ランタイムを使用して適切なパッケージをインストールします。
HTTPS プロキシと転送プロキシ
App Engine はロードバランサで HTTPS 接続を終了し、リクエストをアプリケーションに転送します。NGINX サーバーは、HTTPS 経由でリクエストを受信したときに HTTPS 環境変数($_SERVER["HTTPS"]
)を on
に設定するように構成されています。
一部のアプリケーションでは、ユーザーの IP アドレスの確認が必要になります。これは標準の X-Forwarded-For
ヘッダーで使用できます。
無効になっている関数
次の関数は、php.ini
の disable_functions
ディレクティブで無効になっています。
exec
passthru
proc_open
proc_close
shell_exec
show_source
symlink
system
これらの関数が必要な場合は、アプリケーションのルートに php.ini
ファイルを追加し、disable_functions
ディレクティブを変更します。あるいは、app.yaml
の runtime_config
セクションにある whitelist_functions
を、許可する関数のカンマ区切りリストに設定します。
PHP バージョン 7.3 以前では、suhosin 安全拡張機能がインストールされ、デフォルトでシミュレーション モードに構成されています。シミュレーション モードでは、危険性のある関数の使用がログに記録されます。この記録は Cloud Logging UI に表示されます。シミュレーション モードをオフにした場合、危険性のある関数が使用されると、アプリケーションが終了します。この追加のセキュリティ機能を有効にするには、プロジェクト ルートの php.ini
に次のオプションを追加します。
; Prevent the use of potentially dangerous functions rather than logging them
suhosin.simulation = Off
パッチが適用された関数
parse_str
関数にパッチが適用され、2 つ目のパラメータが必須になりました。1 つのパラメータで parse_str
を呼び出すと、警告がスローされ、関数は呼び出されません。
有効な構成
runtime_config
セクションには、次の構成を含めることができます。
名前 | 説明 | デフォルト値 |
---|---|---|
document_root |
nginx と PHP の DOCUMENT_ROOT を指定します。プロジェクトのルート ディレクトリに対する相対パスを使用する必要があります。
|
必須項目 |
composer_flags |
このキーで composer フラグの一部を無効にできます。 | --no-dev --prefer-dist |
enable_stackdriver_integration |
バージョン 7.3 以前でのみサポートされています。true に設定すると、ランタイムで Google Cloud Observability の統合が自動的に有効になります。この構成には、google/cloud パッケージ v0.33 以降が必要です。
|
false |
skip_lockdown_document_root |
バージョン 7.3 以前でのみサポートされています。デフォルトでは、ランタイムは document_root ディレクトリ下のすべてのファイルとディレクトリに対して厳密な読み取り専用権限を設定します。true に設定すると、ランタイムは権限の変更をスキップします。
|
false |
whitelist_functions |
バージョン 7.3 以前でのみサポートされています。許可リストに登録する関数名のカンマ区切りリストです。 | 空の文字列 |
front_controller_file |
ディレクトリ アクセスのデフォルトの PHP ファイル名。 | index.php |
nginx_conf_http_include |
nginx 構成の一部を含むファイル名。メインの nginx 構成ファイルの http セクションに含まれます。
|
nginx-http.conf |
nginx_conf_include |
nginx 構成の一部を含むファイル名。メインの nginx 構成ファイルの server セクションに含まれます。
|
nginx-app.conf |
nginx_conf_override |
ユーザーが指定する nginx 構成ファイルの名前。メインの nginx 構成ファイルとして使用されます。 | nginx.conf |
php_fpm_conf_override |
ユーザーが指定する php-fpm 構成ファイルの名前。[app] セクションの最後に追加され、既存の構成を上書きします。
|
php-fpm.conf |
php_ini_override |
ユーザーが指定する PHP 構成ファイルの名前。 | php.ini |
supervisord_conf_addition |
ユーザーが指定する supervisord 構成ファイルの名前。メインの supervisord 構成ファイルに含まれます。 | additional-supervisord.conf |
supervisord_conf_override |
ユーザーが指定する supervisord 構成ファイルの名前。メインの supervisord 構成ファイルを上書きします。 | supervisord.conf |
PHP ランタイムでの supervisord の構成
App Engine フレキシブル環境では、supervisord でプロセスを管理します。デフォルトでは、supervisord
は nginx
と php-fpm
を実行して PHP ウェブ アプリケーションを実行します。ただし、一部のアプリケーションでは外部プロセスを実行する必要があります。また、このようなアプリケーションでは、nginx
や php-fpm
が不要になることもあります。
supervisord
により管理されるプロセスを追加する場合は、additional-supervisord.conf
という名前のファイルをプロジェクトのルート ディレクトリに追加します。この場合のサンプル構成ファイルの内容を次に示します。
nginx
と php-fpm
を独自のプロセスに置き換える場合は、supervisord.conf
という名前のファイルをプロジェクトのルート ディレクトリに追加します。この場合のサンプル構成ファイルの内容を次に示します。
ランタイムの拡張
App Engine フレキシブル環境の PHP ランタイムを使用して、カスタム ランタイムを作成できます。詳細については、PHP ランタイムのカスタマイズをご覧ください。
環境変数
次の環境変数が、ランタイム環境によって設定されます。
環境変数 | 説明 |
---|---|
GAE_INSTANCE |
現在のインスタンスの名前。 |
GAE_MEMORY_MB |
アプリケーション プロセスで使用可能なメモリ量。 |
GAE_SERVICE |
アプリケーションの app.yaml ファイルで指定されたサービス名。サービス名が指定されていない場合は、default に設定されます。 |
GAE_VERSION |
現在のアプリケーションのバージョン ラベル。 |
GOOGLE_CLOUD_PROJECT |
アプリケーションに関連付けられたプロジェクト ID。この ID は、Google Cloud Console に表示されます。 |
PORT |
HTTP リクエストを受信するポート。 |
app.yaml
で、追加の構成変数を設定できます。
メタデータ サーバー
アプリケーションのインスタンスは、ホスト名、外部 IP アドレス、インスタンス ID、カスタム メタデータ、サービス アカウント情報など、インスタンスに関する情報を Compute Engine メタデータ サーバーから取得します。App Engine では、インスタンスごとにカスタム メタデータを設定することはできませんが、プロジェクト単位のカスタム メタデータを設定して、App Engine インスタンスや Compute Engine インスタンスから読み取ることができます。
次のサンプル関数では、メタデータ サーバーを使用して PHP バージョン 7.3 以前のインスタンスの外部 IP アドレスを取得します。PHP 7.4 以降については、PHP ランタイムのセクションの例をご覧ください。