Il runtime PHP è lo stack software responsabile installando il codice e le dipendenze dell'applicazione per poi eseguirle dell'applicazione nell'ambiente flessibile.
Versioni PHP
Utilizza PHP 8.3 buildpacks. Per l'elenco completo delle Versioni PHP e Ubuntu corrispondente consulta la sezione Pianificazione del supporto dell'esecuzione.
Per utilizzare una versione PHP supportata, devi:
Installa
gcloud CLI
versione 420.0.0 o successiva. Puoi aggiornare Strumenti dell'interfaccia a riga di comando eseguendogcloud components update
. . Per visualizzare la versione installata, puoi eseguire il comandogcloud version
.Includi le impostazioni
runtime_config
eoperating_system
nel tuo Fileapp.yaml
per specificare un sistema operativo.Dichiara la radice del documento per la tua applicazione nel file
app.yaml
:runtime: php env: flex runtime_config: operating_system: "ubuntu22" document_root: "web"
Anche se puoi specificare la directory principale del progetto (
.
) come principale del documento, ti consigliamo di utilizzare una sottodirectory per Impostazionedocument_root
.Il codice sorgente si trova nel percorso
/workspace
anziché la directory radice (/
). Se sostituisci una configurazione, i processiNGINX
osupervisor
fanno riferimento al tuo file di configurazione in questa directory. A aggiornare i riferimenti corrispondenti, devi:Aggiorna eventuali istruzioni
include
nella configurazione NGINX in modo che siano relative a/workspace
anziché a/etc/nginx
.Alcuni file, come
gzip_params
, non sono inclusi. Come riferimento inclusi i tuoi o una copia di GitHub. File comemime.types
efastcgi_params
vengono disponibile nella directory/etc/nginx
.Alcuni moduli NGINX, ad esempio
nginx-plus-module-ndk
, non sono installati. Imposta il parametro$docroot
o aggiungi il valore manualmente nel file di configurazione diNGINX
.
Facoltativamente, puoi specificare una versione del runtime tramite:
Include
runtime_version
nel tuoapp.yaml
. Per impostazione predefinita, viene utilizzata l'ultima versione di PHP se l'impostazioneruntime_version
non è specificata.Per specificare PHP 8.3 su Ubuntu 22:
runtime: php env: flex runtime_config: operating_system: "ubuntu22" runtime_version: "8.3" document_root: .
Per specificare l'ultima versione di PHP supportata su Ubuntu 22:
runtime: php env: flex runtime_config: operating_system: "ubuntu22" document_root: .
Inclusione di una versione PHP nel file
composer.json
.{ "require": { "php": "8.3.*" } }
Per ulteriori informazioni, consulta il riferimento di
app.yaml
.
Versioni precedenti del runtime
Per utilizzare la versione 7.3 e precedenti di PHP, devi:
Dichiara la radice del documento per la tua applicazione. Puoi farlo nel File
app.yaml
:runtime: php env: flex api_version: 1 runtime_config: document_root: .
Anche se puoi specificare la directory principale del progetto (
.
) come principale del documento, ti consigliamo di utilizzare una sottodirectory perdocument_root
dell'ambientazione.Specifica una versione PHP nel file
composer.json
per impedire l'upgrade automatico della tua applicazione quando viene PHP diventa disponibile.{ "require": { "php": "7.3.*" } }
Supporto per altri runtime PHP
Se devi utilizzare una versione PHP non supportata, puoi creare una runtime personalizzato e seleziona un'immagine di base valida con la versione PHP che ti serve.
Per le immagini di base fornite da Google Immagini di base Docker di Docker, consulta la sezione Creazione di runtime personalizzati.
Personalizza NGINX
Per definire un file di configurazione personalizzato, includi il file nginx-app.conf
nel
nella directory radice del progetto.
Per impostazione predefinita, il front controller del framework utilizza il file index.php
. Tu
potrebbe essere necessario modificarlo in qualcosa di diverso per il tuo progetto. Ad esempio,
il framework Symfony usa app.php
anziché index.php
. Puoi modificare
nome file nella sezione runtime_config
del tuo file app.yaml
:
runtime: php
env: flex
runtime_config:
operating_system: "ubuntu22"
document_root: .
front_controller_file: app.php
Per la versione 7.3 e precedenti, è incluso il file di configurazione nginx-app.conf
nella sezione server del file di configurazione NGINX
principale. Ad esempio,
di configurazione predefinita php-app.conf
, contiene quanto segue:
location / {
# try to serve files directly, fallback to the front controller
try_files $uri /$front_controller_file$is_args$args;
}
Per definire un file di configurazione personalizzato, crea il file nginx-app.conf
nel
nella directory radice del progetto. Il runtime esegue l'override del file predefinito con
il file che fornisci.
Per impostazione predefinita, il front controller del framework utilizza il file index.php
. Tu
potrebbe essere necessario modificarlo in qualcosa di diverso per il tuo progetto. Ad esempio,
il framework Symfony usa app.php
anziché index.php
. Puoi modificare
nome file nella sezione runtime_config
del tuo file app.yaml
:
runtime: php
env: flex
runtime_config:
document_root: .
front_controller_file: app.php
OPcache
Attiva OPcache nel tuo file php.ini
. Vedi l'ID
doc per scoprire come
e configurare OPcache.
Per disattivare OPcache, crea o modifica il file php.ini
con la riga seguente:
opcache.enable=0
Dipendenze
Il runtime cerca un file composer.json
nel tuo
alla directory di origine dell'applicazione e utilizza composer
per installare
le dipendenze prima di avviare l'applicazione. Per ulteriori informazioni sulla dichiarazione
e sulla gestione dei pacchetti, vedi Utilizzo delle librerie PHP.
Utilizzo delle estensioni PHP
Le seguenti estensioni PHP sono preinstallate e abilitate sul sistema:
Versioni PHP supportate
- BCMath
- Bzip2
- Calendar
- tipo c
- cURL
- DBA
- DOM
- Incanta
- EXIF
- Informazioni sul file
- Filtro
- FTP
- GD
- Gettext
- GMP
- icona
- Internazionale
- LDAP
- libxml
- stringa di mb
- MySQLi
- MySQLND
- OpenSSL
- pcntl
- DIP
- PDO_MYSQL
- PDO_PGSQL
- PDO_SQLITE
- PGSQL
- Phar
- POSIX
- Sessione
- Shmop
- SimpleXML
- SOAP
- Prese
- SQLite3
- Ordinato
- Tokenizzatore
- XML
- XMLReader
- XMLWriter
- XSL
- zend_test
- Zip (solo Ubuntu 22)
- Zlib
Puoi attivare le seguenti estensioni utilizzando il file php.ini
:
- gRPC
- ImageMagick
- Analisi della posta
- Memcached
- femmina
- OpenCensus
- OpenTelemetry (PHP versione 8.1 e successive)
- OPcache
- protobuf
- Redis
7.3 e precedenti
- APCu
- Bzip2
- cURL
- f/m
- GMP
- stringa di mb
- mcrypt
- librio
- Memcached
- MySQL (PDO) (utilizza mysqlnd)
- MySQLi (utilizza mysqlnd)
- OPcache
- OpenSSL
- pcntl
- PostgreSQL
- PostgreSQL (PDO)
- Leggi
- ricodifica
- sem
- Prese
- Codice postale
- Zlib
Le seguenti estensioni PHP sono disattivate per impostazione predefinita.
Puoi attivare le seguenti estensioni nel file php.ini
:
- amqp
- APM (7.0 e versioni successive)
- BCMath
- Bitset
- Calendar
- Cassandra
- couchbase (7.0 e versioni successive)
- ds (7.0 e versioni successive)
- eio
- ev
- evento
- Exif
- FTP
- GD (con supporto PNG, JPEG e FreeType)
- gettext
- gRPC
- rosa
- igbinary
- intl
- ImageMagick
- jsond
- krb5
- lua (7.0 e versioni successive)
- LZF
- professionista
- femmina
- MySQL (5.6)
- oauth
- OpenCensus
- PCNTL
- Phalcon (5.6, 7.0)
- pq
- protobuf
- rdkafka
- Redis
- SeasLog
- Shmop
- SOAP
- SQLite3
- SQLite (PDO)
- stomp
- intenso
- sincronizzazione
- tcpwrap
- timezonedb
- v8js (7.0 e versioni successive)
- vips (7.0 e versioni successive)
- XMLRPC
- XSL
- yaconf (7.0 e versioni successive)
- yaf
- yaml
Per attivare un'estensione, aggiungi un file php.ini
nella radice del tuo
con l'istruzione extension
:
; Enable the Redis extension
extension=redis.so
; Enable the OpenTelemetry extension (must be in an opentelemetry section)
[opentelemetry]
extension=opentelemetry.so
In alternativa, puoi anche attivare un'estensione aggiungendo un require
al tuo
composer.json
:
{
"require": {
"ext-redis": "*"
}
}
Questi pacchetti consentono l'installazione delle estensioni PHP più comuni. Se le tue dell'applicazione richiede ulteriori dipendenze a livello di sistema operativo, estendere il runtime PHP o utilizzare una runtime personalizzato per installare i pacchetti appropriati.
Proxy HTTPS e di forwarding
App Engine termina la connessione HTTPS al bilanciatore del carico e inoltra
richiesta alla tua applicazione. Il server NGINX è configurato per impostare il protocollo HTTPS
variabile di ambiente ($_SERVER["HTTPS"]
) in on
quando la richiesta viene effettuata tramite
HTTPS.
Alcune applicazioni devono anche verificare l'indirizzo IP dell'utente. Questo è
disponibile nell'intestazione X-Forwarded-For
standard.
Funzioni disabilitate
Le seguenti funzioni sono disabilitate con l'istruzione disable_functions
in
php.ini
:
exec
passthru
proc_open
proc_close
shell_exec
show_source
symlink
system
Se hai bisogno di una delle funzioni riportate sopra, aggiungi un file php.ini
alla radice di
l'applicazione e modificare l'istruzione disable_functions
. In alternativa,
imposta whitelist_functions
nella sezione runtime_config
in app.yaml
su un
un elenco di funzioni delimitato da virgole da consentire.
Per PHP 7.3 e versioni precedenti, è disponibile l'estensione suhosin Security
installati e configurati per essere eseguiti in modalità di simulazione.
La modalità di simulazione registra l'uso di funzioni potenzialmente pericolose, che verranno mostrate
nell'interfaccia utente di Cloud Logging. Disattivare la modalità di simulazione
farà uscire l'applicazione quando viene utilizzata una funzione potenzialmente pericolosa.
Per abilitare questa funzionalità di sicurezza aggiuntiva, aggiungi php.ini
nella directory radice del progetto
con la seguente opzione:
; Prevent the use of potentially dangerous functions rather than logging them
suhosin.simulation = Off
Funzioni con patch
La funzione parse_str
è stata applicata, mentre il secondo parametro è
obbligatorio. Se chiami parse_str
con un solo parametro, questo
genera un avviso e la funzione non viene chiamata.
Configurazioni disponibili
Nella sezione runtime_config
puoi includere le seguenti configurazioni:
Nome | Descrizione | Valore predefinito |
---|---|---|
document_root |
Specifica DOCUMENT_ROOT per nginx e PHP. Devi utilizzare
un percorso relativo dalla directory principale del progetto.
|
Campo obbligatorio |
composer_flags |
Con questa chiave puoi eseguire l'override di alcuni flag del compositore. | --no-dev --prefer-dist |
enable_stackdriver_integration |
Supportata solo per la versione 7.3 e precedenti.
Se impostato su true, il runtime abiliterà automaticamente Google Cloud Observability
e integrazione. Questa configurazione richiede google/cloud pacchetto
v0.33 o successiva.
|
falso |
skip_lockdown_document_root |
Supportata solo per la versione 7.3 e precedenti.
Per impostazione predefinita, il runtime imposterà un'autorizzazione rigida di sola lettura su tutti i
i file e le directory nella directory document_root .
Se impostato su true , il runtime ignorerà la modifica del valore
autorizzazione.
|
falso |
whitelist_functions |
Supportata solo per la versione 7.3 e precedenti. Un elenco separato da virgole di nomi di funzioni da inserire nella lista consentita. | Una stringa vuota |
front_controller_file |
Nome del file PHP predefinito per l'accesso alla directory. | index.php |
nginx_conf_http_include |
Nome file di una configurazione nginx parziale, che verrà incluso nel
Sezione http nel file di configurazione nginx principale.
|
nginx-http.conf |
nginx_conf_include |
Nome file di una configurazione nginx parziale che verrà incluso nel
Sezione server nel file di configurazione nginx principale.
|
nginx-app.conf |
nginx_conf_override |
Nome file di un file di configurazione nginx fornito dall'utente, che verrà utilizzato il file di configurazione principale nginx. | nginx.conf |
php_fpm_conf_override |
Il nome del file di configurazione php-fpm fornito dall'utente, che sarà
incluso in fondo alla sezione [app] , in modo che
le configurazioni esistenti.
|
php-fpm.conf |
php_ini_override |
Nome file di un file di configurazione PHP fornito dall'utente. | php.ini |
supervisord_conf_addition |
Nome di un file di configurazione supervisionato fornito dall'utente, che verrà incluso nel file di configurazione principale di supervisord. | additional-supervisord.conf |
supervisord_conf_override |
Nome file di un file di configurazione supervisore fornito dall'utente, che sostituirà il file di configurazione principale di supervisord. | supervisord.conf |
Configurazione del supervisore nel runtime di PHP
L'ambiente flessibile di App Engine utilizza supervisord
per gestire i processi. Per impostazione predefinita, supervisord
esegue nginx
e php-fpm
per
eseguire applicazioni web PHP; tuttavia alcune applicazioni devono eseguire
i processi esterni. Inoltre, a volte queste applicazioni non richiedono
nginx
o php-fpm
.
Se vuoi aggiungere un processo gestito da supervisord
, aggiungi un file denominato
additional-supervisord.conf
alla directory principale del progetto. La
di seguito è riportato un esempio di contenuto del file di configurazione per questo caso:
Se vuoi sostituire nginx
e php-fpm
con il tuo processo, aggiungi un file
denominato supervisord.conf
nella directory principale del progetto. Le seguenti
Ecco un esempio di contenuto del file di configurazione per questo caso:
Estensione del runtime
Il runtime PHP nell'ambiente flessibile di App Engine può essere utilizzato per creare un runtime personalizzato. Per ulteriori informazioni, consulta Personalizzazione del runtime PHP informazioni.
Variabili di ambiente
L'ambiente di runtime imposta le seguenti variabili di ambiente:
Variabile di ambiente | Descrizione |
---|---|
GAE_INSTANCE |
Il nome dell'istanza attuale. |
GAE_MEMORY_MB |
La quantità di memoria disponibile per il processo di richiesta. |
GAE_SERVICE |
Il nome del servizio specificato nel campo app.yaml dell'applicazione
o, se non viene specificato alcun nome di servizio, viene impostato su default . |
GAE_VERSION |
L'etichetta della versione dell'applicazione corrente. |
GOOGLE_CLOUD_PROJECT |
L'ID progetto associato alla tua applicazione, visibile in la console Google Cloud |
PORT |
La porta che riceverà le richieste HTTP. |
Puoi impostare altre variabili di ambiente con app.yaml
.
Server metadati
Ogni istanza dell'applicazione può utilizzare Server di metadati di Compute Engine per eseguire query sulle informazioni sul istanza, inclusi nome host, indirizzo IP esterno, ID istanza, metadati e dati dell'account di servizio. App Engine non ti consente di impostare metadati personalizzati per ogni istanza, ma puoi impostare metadati personalizzati a livello di progetto e leggili dalla tua app di Compute Engine e le istanze di Compute Engine.
Questa funzione di esempio utilizza il server di metadati per ottenere l'indirizzo IP esterno di di un'istanza: