Il runtime PHP è lo stack software responsabile dell'installazione del codice e delle dipendenze dell'applicazione e dell'esecuzione dell'applicazione nell'ambiente flessibile.
Le versioni
7.4
e successive sono basate su buildpacks, che richiede la scelta di un sistema operativo nel fileapp.yaml
. Ad esempio, per utilizzare PHP 8.3, devi specificare Ubuntu 22 come sistema operativo.Le versioni
7.3
e precedenti sono state create utilizzando Docker.
Per l'elenco completo delle versioni PHP supportate e delle versioni di Ubuntu corrispondenti, consulta la pianificazione del supporto per l'esecuzione.
Scegli una versione PHP
Nuove versioni di runtime
Per il runtime PHP versione 7.4 e successive, devi:
Includi le impostazioni
runtime_config
eoperating_system
nel 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: .
Anche se puoi specificare la directory radice del progetto (
.
) come directory principale del documento, ti consigliamo di utilizzare una sottodirectory per l'impostazionedocument_root
.Per PHP 7.4 e versioni successive, il codice sorgente si trova nella directory
/workspace
anziché nella directory radice (/
). Se esegui l'override di una configurazione, i processiNGINX
osupervisor
fanno riferimento al file di configurazione in questa directory. Per aggiornare i riferimenti corrispondenti, devi:- Aggiorna qualsiasi istruzione
include
nella configurazione NGINX in modo che sia relativa a/workspace
anziché/etc/nginx
. - Alcuni file, come
gzip_params
, non sono inclusi. Per fare riferimento a questi file, includi il tuo file o una copia di GitHub. I file comemime.types
efastcgi_params
sono disponibili nella directory/etc/nginx
. - Alcuni moduli NGINX come
nginx-plus-module-ndk
non sono installati. Imposta il valore$docroot
o aggiungilo manualmente nel file di configurazioneNGINX
.
- Aggiorna qualsiasi istruzione
Installa
gcloud CLI
versione 420.0.0 o successiva. Puoi aggiornare gli strumenti dell'interfaccia a riga di comando eseguendo il comandogcloud components update
. Per visualizzare la versione installata, puoi eseguire il comandogcloud version
.
Facoltativamente, puoi specificare una versione del runtime in questo modo:
Includi l'impostazione
runtime_version
inapp.yaml
. Per impostazione predefinita, se l'impostazioneruntime_version
non è specificata, viene utilizzata la versione PHP più recente. Ad esempio: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 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 app.yaml
.
Versioni di runtime precedenti
Per PHP versione 7.3 e precedenti, devi:
Dichiara la radice del documento per la tua applicazione. Puoi farlo nel tuo file
app.yaml
:runtime: php env: flex api_version: 1 runtime_config: document_root: .
Anche se puoi specificare la directory radice del progetto (
.
) come directory principale del documento, ti consigliamo di utilizzare una sottodirectory per l'impostazionedocument_root
.Specifica una versione PHP nel file
composer.json
per impedire l'upgrade automatico dell'applicazione quando diventa disponibile una nuova versione di PHP.{ "require": { "php": "7.3.*" } }
Il PHP 7.3 è basato su Ubuntu 16.04.
Personalizza NGINX
Per definire un file di configurazione personalizzato:
Versione 7.4 e successive
Includi il file nginx-app.conf
nella directory radice del progetto.
Per impostazione predefinita, il front controller del framework utilizza il file index.php
. Potrebbe
essere necessario cambiarla in un'altra per il tuo progetto. Ad esempio,
il framework Symfony utilizza app.php
anziché index.php
. Puoi modificare il
nome file nella sezione runtime_config
del file app.yaml
:
runtime: php
env: flex
runtime_config:
operating_system: "ubuntu22"
document_root: .
front_controller_file: app.php
7.3 e versioni precedenti
Il file di configurazione nginx-app.conf
è incluso nella sezione server del file di configurazione NGINX
principale. Ad esempio,
il file di configurazione predefinito 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
nella directory principale del progetto. Il runtime sostituisce il file predefinito con il file che fornisci.
Per impostazione predefinita, il front controller del framework utilizza il file index.php
. Potrebbe
essere necessario cambiarla in un'altra per il tuo progetto. Ad esempio,
il framework Symfony utilizza app.php
anziché index.php
. Puoi modificare il
nome file nella sezione runtime_config
del file app.yaml
:
runtime: php
env: flex
runtime_config:
document_root: .
front_controller_file: app.php
OPcache
La versione PHP 7.3 e precedenti include la compilazione e l'abilitazione di OPcache per impostazione predefinita. Per PHP 7.4 e versioni successive, devi abilitarlo
nel file php.ini
. Consulta il documento
ufficiale per informazioni su come
configurare OPcache.
Per disabilitare OPcache, crea o modifica il file php.ini
con la riga seguente:
opcache.enable=0
Dipendenze
Il runtime cerca un file composer.json
nella directory di origine dell'applicazione e utilizza composer
per installare eventuali dipendenze prima di avviare l'applicazione. Per ulteriori informazioni sulla dichiarazione e sulla gestione dei pacchetti, consulta Utilizzo delle librerie PHP.
Utilizzo delle estensioni PHP
Le seguenti estensioni PHP sono preinstallate e attive sul sistema:
Versione 7.4 e successive
- BCMath
- Bzip2
- Calendar
- Ctype
- cURL
- Nome commerciale
- DOM
- Incanto
- EXIF
- Informazioni file
- Filtro
- FTP
- GD
- Ottieni testo
- GMP
- icona
- Internazionale
- LDAP
- libxml
- mbstring
- MySQLi
- MySQLND
- OpenSSL
- pcntl
- PDO
- PDO_MYSQL
- PDO_PGSQL
- PDO_SQLITE
- PGSQL
- Phar
- POSIX
- Sessione
- Shmop
- SimpleXML
- SOAP
- Socket
- SQLite3
- In ordine
- 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 dinamica
- Memcached
- mongodb
- OpenCensus
- OpenTelemetry (PHP 8.1 e versioni successive)
- OPcache
- protobuf
- Redis
7.3 e versioni precedenti
- Acu
- Bzip2
- cURL
- F/M
- GMP
- mbstring
- mcrypt
- libsodio
- Memcached
- MySQL (PDO) (utilizza mysqlnd)
- MySQLi (utilizza mysqlnd)
- OPcache
- OpenSSL
- pcntl
- PostgreSQL
- PostgreSQL (PDO)
- Riga di lettura
- ricodifica
- sem
- Socket
- Codice postale
- Zlib
Le seguenti estensioni PHP sono disattivate per impostazione predefinita.
Utilizzando il file php.ini
, puoi attivare le seguenti estensioni:
- amqp
- APM (7.0+)
- BCMath
- Bitset
- Calendar
- Cassandra
- couchbase (7.0 e versioni successive)
- ds (7.0 e versioni successive)
- eio
- ev
- evento
- Exif
- FTP
- GD (con supporto di PNG, JPEG e FreeType)
- testo
- gRPC
- climatizzazione
- igbinario
- 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
- sincronizzazione
- tcpwrap
- fuso orariodb
- v8js (7.0 e versioni successive)
- vip (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 directory principale dell'applicazione
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 require
a composer.json
:
{
"require": {
"ext-redis": "*"
}
}
Questi pacchetti consentono l'installazione delle estensioni PHP più diffuse. Se la tua applicazione richiede ulteriori dipendenze a livello di sistema operativo, devi estendere il runtime PHP o utilizzare un runtime personalizzato per installare i pacchetti appropriati.
HTTPS e proxy di inoltro
App Engine termina la connessione HTTPS al bilanciatore del carico e inoltra la richiesta alla tua applicazione. Il server NGINX è configurato per impostare la variabile di ambiente HTTPS ($_SERVER["HTTPS"]
) su on
quando la richiesta viene effettuata tramite HTTPS.
Alcune applicazioni devono anche verificare l'indirizzo IP dell'utente. Questa opzione è disponibile nell'intestazione X-Forwarded-For
standard.
Funzioni disattivate
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 elencate sopra, aggiungi un file php.ini
nella directory principale dell'applicazione e modifica l'istruzione disable_functions
. In alternativa,
imposta whitelist_functions
nella sezione runtime_config
in app.yaml
su un
elenco di funzioni delimitate da virgole da consentire.
Per la versione PHP 7.3 e precedenti, l'estensione suhosin Security è installata e configurata per impostazione predefinita per l'esecuzione in modalità di simulazione.
La modalità di simulazione registra l'utilizzo di funzioni potenzialmente pericolose, che verranno visualizzate nella UI di Cloud Logging. Se disattivi la modalità di simulazione, l'applicazione si chiuderà quando viene usata una funzione potenzialmente pericolosa.
Per abilitare questa funzionalità di sicurezza aggiuntiva, aggiungi un php.ini
nella directory principale del progetto con la seguente opzione:
; Prevent the use of potentially dangerous functions rather than logging them
suhosin.simulation = Off
Funzioni con patch
Alla funzione parse_str
è stata applicata la patch e il secondo parametro è obbligatorio. Se chiami parse_str
con un solo parametro, verrà
visualizzato un avviso e la funzione non verrà 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 della directory root del progetto.
|
Campo obbligatorio |
composer_flags |
Puoi eseguire l'override di alcuni dei flag del Composer con questa chiave. | --no-dev --prefer-dist |
enable_stackdriver_integration |
Supportata solo per la versione 7.3 e precedenti.
Se impostato su true, il runtime abiliterà automaticamente l'integrazione di Google Cloud Observability. Questa configurazione richiede il pacchetto google/cloud versione 0.33 o successiva.
|
false |
skip_lockdown_document_root |
Supportata solo per la versione 7.3 e precedenti.
Per impostazione predefinita, il runtime imposta un'autorizzazione di sola lettura rigida per tutti i file e le directory nella directory document_root .
Se impostato su true , il runtime ignorerà la modifica dell'autorizzazione.
|
false |
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 sarà inclusa nella
sezione http del file di configurazione nginx principale.
|
nginx-http.conf |
nginx_conf_include |
Nome file di una configurazione nginx parziale che verrà inclusa nella
sezione server del 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 come file di configurazione principale nginx. | nginx.conf |
php_fpm_conf_override |
Nome del file di configurazione php-fpm fornito dall'utente, che verrà incluso nella parte inferiore della sezione [app] in modo che sostituisca le configurazioni esistenti.
|
php-fpm.conf |
php_ini_override |
Nome del file di configurazione PHP fornito dall'utente. | php.ini |
supervisord_conf_addition |
Nome del file di configurazione di Supervisord fornito dall'utente, che sarà incluso nel file di configurazione principale di Supervisord. | additional-supervisord.conf |
supervisord_conf_override |
Nome file di un file di configurazione supervisord fornito dall'utente, che sostituirà il file di configurazione principale di supervisord. | supervisord.conf |
Configurazione di supervisord nel runtime PHP
L'ambiente flessibile di App Engine utilizza supervisord per gestire i processi. Per impostazione predefinita, supervisord
esegue nginx
e php-fpm
per eseguire le applicazioni web PHP. Tuttavia, alcune applicazioni devono eseguire processi esterni. Inoltre, a volte queste applicazioni non hanno bisogno nemmeno di
nginx
o php-fpm
.
Se vuoi aggiungere un processo gestito da supervisord
, aggiungi un file denominato
additional-supervisord.conf
alla directory root del progetto. 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
alla directory root del progetto. Di seguito è riportato un esempio di contenuto di file di configurazione per questo caso:
Estendere il runtime
Il runtime PHP dell'ambiente flessibile di App Engine può essere utilizzato per creare un runtime personalizzato. Per ulteriori informazioni, consulta Personalizzazione del runtime PHP.
Variabili di ambiente
Le seguenti variabili di ambiente sono impostate dall'ambiente di runtime:
Variabile di ambiente | Descrizione |
---|---|
GAE_INSTANCE |
Il nome dell'istanza corrente. |
GAE_MEMORY_MB |
La quantità di memoria disponibile per il processo di applicazione. |
GAE_SERVICE |
Il nome del servizio specificato nel file app.yaml
della tua applicazione oppure, se non viene specificato alcun nome, il nome è impostato su default . |
GAE_VERSION |
L'etichetta della versione dell'applicazione corrente. |
GOOGLE_CLOUD_PROJECT |
L'ID progetto associato all'applicazione, visibile nella console Google Cloud |
PORT |
La porta che riceverà le richieste HTTP. |
Puoi impostare variabili di ambiente aggiuntive con app.yaml
.
Server metadati
Ogni istanza dell'applicazione può utilizzare il server di metadati di Compute Engine per eseguire query sulle informazioni relative all'istanza, tra cui nome host, indirizzo IP esterno, ID istanza, metadati personalizzati e informazioni sull'account di servizio. App Engine non consente di impostare metadati personalizzati per ogni istanza, ma puoi impostare metadati personalizzati a livello di progetto e leggerli dalle istanze di App Engine e Compute Engine.
Questa funzione di esempio utilizza il server di metadati per ottenere l'indirizzo IP esterno dell'istanza per PHP versione 7.3 e precedenti. Per PHP 7.4 e versioni successive, guarda gli esempi nella sezione relativa al runtime PHP: