Runtime PHP adalah stack software yang berfungsi untuk menginstal kode aplikasi dan dependensi Anda, lalu menjalankan aplikasi tersebut di lingkungan yang fleksibel.
Versi PHP
PHP 8.3 menggunakan buildpacks. Untuk mengetahui daftar lengkap versi PHP yang didukung, dan versi Ubuntu yang sesuai, lihat Jadwal dukungan runtime.
Untuk menggunakan versi PHP yang didukung, Anda harus:
Instal
gcloud CLI
versi 420.0.0 atau yang lebih baru. Anda dapat memperbarui perkakas CLI dengan menjalankan perintahgcloud components update
. Untuk melihat versi yang diinstal, Anda dapat menjalankan perintahgcloud version
.Sertakan setelan
runtime_config
danoperating_system
dalam fileapp.yaml
untuk menentukan sistem operasi.Deklarasikan root dokumen untuk aplikasi Anda di file
app.yaml
:runtime: php env: flex runtime_config: operating_system: "ubuntu22" document_root: "web"
Meskipun Anda dapat menentukan direktori root project (
.
) sebagai root dokumen, sebaiknya gunakan subdirektori untuk setelandocument_root
.Kode sumber berada di direktori
/workspace
, bukan direktori utama (/
). Jika Anda mengganti konfigurasi apa pun, prosesNGINX
atausupervisor
akan merujuk kepada file konfigurasi Anda dalam direktori ini. Untuk memperbarui referensi yang terkait, Anda harus:Perbarui pernyataan
include
apa pun dalam konfigurasi NGINX Anda agar relatif terhadap/workspace
, bukan/etc/nginx
.Beberapa file seperti
gzip_params
tidak disertakan. Untuk mereferensikan file ini, sertakan file Anda sendiri atau salinan dari GitHub. File sepertimime.types
danfastcgi_params
tersedia di direktori/etc/nginx
.Beberapa modul NGINX seperti
nginx-plus-module-ndk
tidak diinstal. Tetapkan nilai$docroot
atau tambahkan nilai secara manual di file konfigurasiNGINX
Anda.
Secara opsional, Anda dapat menentukan versi runtime dengan:
Menyertakan setelan
runtime_version
dalamapp.yaml
Anda. Secara default, versi PHP terbaru akan digunakan jika setelanruntime_version
tidak ditentukan.Untuk menentukan PHP 8.3 di Ubuntu 22:
runtime: php env: flex runtime_config: operating_system: "ubuntu22" runtime_version: "8.3" document_root: .
Untuk menentukan versi PHP terbaru yang didukung di Ubuntu 22:
runtime: php env: flex runtime_config: operating_system: "ubuntu22" document_root: .
Menyertakan versi PHP dalam file
composer.json
.{ "require": { "php": "8.3.*" } }
Lihat referensi
app.yaml
untuk informasi selengkapnya.
Versi runtime sebelumnya
Untuk menggunakan PHP versi 7.3 dan yang lebih lama, Anda harus:
Deklarasikan root dokumen untuk aplikasi Anda. Anda dapat melakukannya di file
app.yaml
:runtime: php env: flex api_version: 1 runtime_config: document_root: .
Meskipun Anda dapat menentukan direktori root project (
.
) sebagai root dokumen, sebaiknya gunakan subdirektori untuk setelandocument_root
.Tentukan versi PHP di file
composer.json
agar aplikasi Anda tidak otomatis melakukan upgrade saat versi baru PHP tersedia.{ "require": { "php": "7.3.*" } }
Dukungan untuk runtime PHP lainnya
Jika perlu menggunakan versi PHP yang tidak didukung, Anda dapat membuat runtime kustom dan memilih image dasar yang valid dengan versi PHP yang Anda butuhkan.
Untuk image dasar yang disediakan Google atau image dasar PHP Docker, lihat Mem-build runtime kustom.
Kustomisasi NGINX
Untuk menentukan file konfigurasi kustom, sertakan file nginx-app.conf
di
direktori root project Anda.
Secara default, pengontrol depan framework menggunakan file index.php
. Anda
mungkin perlu mengubahnya menjadi sesuatu yang berbeda untuk project Anda. Misalnya,
framework Symfony menggunakan app.php
, bukan index.php
. Anda dapat mengubah
nama file di bagian runtime_config
dari file app.yaml
:
runtime: php
env: flex
runtime_config:
operating_system: "ubuntu22"
document_root: .
front_controller_file: app.php
Untuk versi 7.3 dan yang lebih lama, file konfigurasi nginx-app.conf
disertakan
di bagian server pada file konfigurasi NGINX
utama. Misalnya, file php-app.conf
konfigurasi default, berisi hal berikut:
location / {
# try to serve files directly, fallback to the front controller
try_files $uri /$front_controller_file$is_args$args;
}
Untuk menentukan file konfigurasi kustom, buat file nginx-app.conf
di
direktori root project Anda. Runtime akan mengganti file default dengan
file yang Anda berikan.
Secara default, pengontrol depan framework menggunakan file index.php
. Anda
mungkin perlu mengubahnya menjadi sesuatu yang berbeda untuk project Anda. Misalnya,
framework Symfony menggunakan app.php
, bukan index.php
. Anda dapat mengubah
nama file di bagian runtime_config
dari file app.yaml
:
runtime: php
env: flex
runtime_config:
document_root: .
front_controller_file: app.php
OPcache
Aktifkan OPcache di file php.ini
Anda. Lihat dokumen resmi untuk mengetahui cara mengonfigurasi OPcache.
Untuk menonaktifkan OPcache, buat atau edit file php.ini
dengan baris berikut:
opcache.enable=0
Dependensi
Runtime mencari file composer.json
dalam
direktori sumber aplikasi Anda dan menggunakan composer
untuk menginstal
dependensi sebelum memulai aplikasi. Untuk informasi lebih lanjut tentang mendeklarasikan dan mengelola paket, lihat Menggunakan Library PHP.
Menggunakan ekstensi PHP
Ekstensi PHP berikut sudah diinstal dan diaktifkan di sistem:
Versi PHP yang didukung
- BCMath
- Bzip2
- Kalender
- 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 only)
- Zlib
Anda dapat mengaktifkan ekstensi berikut menggunakan file php.ini
:
- gRPC
- ImageMagick
- Mailparse
- Memcached
- mongodb
- OpenCensus
- OpenTelemetry (PHP versi 8.1 dan yang lebih baru)
- OPcache
- protobuf
- Redis
v7.3 dan versi sebelumnya
- APCu
- Bzip2
- cURL
- FPM
- GMP
- mbstring
- mcrypt
- libsodium
- Memcached
- MySQL (PDO) (menggunakan mysqlnd)
- MySQLi (menggunakan mysqlnd)
- OPcache
- OpenSSL
- pcntl
- PostgreSQL
- PostgreSQL (PDO)
- Readline
- recode
- sem
- Sockets
- Zip
- Zlib
Ekstensi PHP berikut dinonaktifkan secara default.
Anda dapat mengaktifkan ekstensi berikut menggunakan file php.ini
:
- amqp
- APM (7.0+)
- BCMath
- Bitset
- Kalender
- Cassandra
- couchbase (7.0+)
- ds (7.0+)
- eio
- ev
- peristiwa
- Exif
- FTP
- GD (dengan dukungan PNG, JPEG, dan 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
Untuk mengaktifkan ekstensi, tambahkan file php.ini
di root aplikasi Anda dengan perintah extension
:
; Enable the Redis extension
extension=redis.so
; Enable the OpenTelemetry extension (must be in an opentelemetry section)
[opentelemetry]
extension=opentelemetry.so
Atau, Anda juga dapat mengaktifkan ekstensi dengan menambahkan require
ke composer.json
:
{
"require": {
"ext-redis": "*"
}
}
Paket-paket ini memungkinkan penginstalan ekstensi PHP yang paling populer. Jika aplikasi memerlukan dependensi level sistem operasi tambahan, Anda harus memperpanjang runtime PHP atau menggunakan runtime kustom untuk menginstal paket yang sesuai.
HTTPS dan proxy penerusan
App Engine menghentikan koneksi HTTPS di load balancer dan meneruskan permintaan ke aplikasi Anda. Server NGINX dikonfigurasi untuk menetapkan variabel lingkungan HTTPS ($_SERVER["HTTPS"]
) ke on
saat permintaan dibuat melalui HTTPS.
Beberapa aplikasi juga perlu memastikan alamat IP pengguna. Ini tersedia di header X-Forwarded-For
standar.
Fungsi yang dinonaktifkan
Fungsi berikut dinonaktifkan dengan perintah disable_functions
di
php.ini
:
exec
passthru
proc_open
proc_close
shell_exec
show_source
symlink
system
Jika Anda memerlukan salah satu fungsi di atas, tambahkan file php.ini
di root aplikasi Anda dan ubah perintah disable_functions
. Atau,
tetapkan whitelist_functions
di bagian runtime_config
pada app.yaml
ke
daftar fungsi yang dipisahkan koma untuk mengizinkan.
Untuk PHP versi 7.3 dan yang lebih lama, ekstensi Keamanan suhosin diinstal dan dikonfigurasi secara default untuk berjalan dalam mode simulasi.
Mode simulasi mencatat penggunaan fungsi yang berpotensi berbahaya ke dalam log, yang akan ditampilkan di UI Cloud Logging. Menonaktifkan mode simulasi akan membuat aplikasi Anda keluar saat fungsi yang berpotensi berbahaya digunakan.
Untuk mengaktifkan fitur keamanan tambahan ini, tambahkan php.ini
di root project Anda dengan opsi berikut:
; Prevent the use of potentially dangerous functions rather than logging them
suhosin.simulation = Off
Fungsi yang di-patch
Fungsi parse_str
di-patch dan parameter kedua bersifat wajib. Jika Anda memanggil parse_str
hanya dengan satu parameter, peringatan akan ditampilkan dan fungsi tidak akan dipanggil.
Konfigurasi yang tersedia
Anda dapat menyertakan konfigurasi berikut di bagian runtime_config
:
Nama | Deskripsi | Nilai default |
---|---|---|
document_root |
Menentukan DOCUMENT_ROOT untuk nginx dan PHP. Anda harus menggunakan jalur relatif dari direktori root project.
|
Kolom wajib diisi |
composer_flags |
Anda dapat mengganti beberapa tanda komposer dengan kunci ini. | --no-dev --prefer-dist |
enable_stackdriver_integration |
Hanya didukung untuk versi 7.3 dan yang lebih lama.
Jika disetel ke benar (true), runtime akan otomatis mengaktifkan integrasi Google Cloud Observability. Konfigurasi ini memerlukan paket google/cloud
v0.33 atau yang lebih tinggi.
|
false |
skip_lockdown_document_root |
Hanya didukung untuk versi 7.3 dan yang lebih lama.
Secara default, runtime akan menetapkan izin hanya baca yang ketat pada semua
file dan direktori yang ada di direktori document_root .
Jika disetel ke true , runtime akan melewati perubahan
izin.
|
false |
whitelist_functions |
Hanya didukung untuk versi 7.3 dan yang lebih lama. Daftar nama fungsi yang dipisahkan koma untuk diizinkan. | String kosong |
front_controller_file |
Nama file PHP default untuk akses direktori. | index.php |
nginx_conf_http_include |
Nama file konfigurasi nginx parsial, yang akan disertakan di bagian http pada file konfigurasi nginx utama.
|
nginx-http.conf |
nginx_conf_include |
Nama file konfigurasi nginx parsial yang akan disertakan di bagian server pada file konfigurasi nginx utama.
|
nginx-app.conf |
nginx_conf_override |
Nama file dari file konfigurasi nginx yang disediakan pengguna, yang akan digunakan sebagai file konfigurasi utama nginx. | nginx.conf |
php_fpm_conf_override |
Nama file dari file konfigurasi php-fpm yang diberikan pengguna, yang akan disertakan di bagian bawah [app] sehingga akan mengganti konfigurasi yang ada.
|
php-fpm.conf |
php_ini_override |
Nama file dari file konfigurasi PHP yang diberikan pengguna. | php.ini |
supervisord_conf_addition |
Nama file dari file konfigurasi supervisord yang disediakan pengguna yang akan disertakan dalam file konfigurasi supervisord utama. | additional-supervisord.conf |
supervisord_conf_override |
Nama file dari file konfigurasi supervisord yang disediakan pengguna, yang akan menggantikan file konfigurasi supervisord utama. | supervisord.conf |
Anda dapat mengontrol apakah Nginx menayangkan file statis untuk URI yang cocok dengan menetapkan variabel lingkungan NGINX_SERVES_STATIC_FILES
di bagian build_env_variables
dari file app.yaml
:
runtime: php
env: flex
runtime_config:
document_root: "web"
operating_system: "ubuntu22"
build_env_variables:
NGINX_SERVES_STATIC_FILES: true
Mengonfigurasi supervisord di runtime PHP
Lingkungan fleksibel App Engine menggunakan supervisord untuk mengelola proses. Secara default, supervisord
menjalankan nginx
dan php-fpm
untuk menjalankan aplikasi web PHP; namun, beberapa aplikasi perlu
menjalankan proses eksternal. Selain itu, aplikasi semacam ini terkadang bahkan tidak memerlukan
nginx
atau php-fpm
.
Jika Anda ingin menambahkan proses yang dikelola oleh supervisord
, tambahkan file
bernama additional-supervisord.conf
ke direktori root project. Berikut
adalah contoh konten file konfigurasi untuk kasus ini:
Jika ingin mengganti nginx
dan php-fpm
dengan proses Anda, tambahkan file
bernama supervisord.conf
ke direktori root project. Berikut
adalah contoh konten file konfigurasi untuk kasus ini:
Memperpanjang runtime
Runtime PHP lingkungan fleksibel App Engine dapat digunakan untuk membuat runtime kustom. Lihat Kustomisasi Runtime PHP untuk informasi selengkapnya.
Variabel lingkungan
Variabel lingkungan berikut ditetapkan oleh lingkungan runtime:
Variabel lingkungan | Deskripsi |
---|---|
GAE_INSTANCE |
Nama instance saat ini. |
GAE_MEMORY_MB |
Jumlah memori yang tersedia untuk proses aplikasi. |
GAE_SERVICE |
Nama layanan yang ditentukan dalam file app.yaml aplikasi Anda, atau jika tidak ada nama layanan yang ditentukan, nama akan ditetapkan ke default . |
GAE_VERSION |
Label versi aplikasi saat ini. |
GOOGLE_CLOUD_PROJECT |
Project ID yang terkait dengan aplikasi Anda, yang terlihat di konsol Google Cloud |
PORT |
Port yang akan menerima permintaan HTTP. |
Anda dapat menetapkan variabel lingkungan tambahan dengan app.yaml
.
Server metadata
Setiap instance aplikasi Anda dapat menggunakan server metadata Compute Engine untuk mengkueri informasi tentang instance, termasuk nama host, alamat IP eksternal, ID instance, metadata kustom, dan informasi akun layanan. Dengan App Engine, Anda tidak dapat menetapkan metadata kustom untuk setiap instance, tetapi Anda dapat menetapkan metadata kustom tingkat project serta membacanya dari instance App Engine dan Compute Engine Anda.
Fungsi contoh ini menggunakan server metadata untuk mendapatkan alamat IP eksternal instance: