Con App Engine puoi creare applicazioni web utilizzando il linguaggio di programmazione PHP. Il tuo PHP dell'applicazione viene eseguita sull'infrastruttura scalabile di Google e utilizza l'archiviazione permanente e i servizi.
Selezione del runtime PHP
App Engine esegue l'applicazione web PHP utilizzando un interprete PHP 5.5.34. Nota: su Linux è necessario anche installare PHP localmente per eseguire le tue app PHP.
Per impostare l'app per l'utilizzo del runtime PHP, aggiungi quanto segue a app.yaml
file:
runtime: php55
api_version: 1
...
Il primo elemento, runtime
, seleziona l'ambiente di runtime PHP.
Il secondo elemento, api_version
, seleziona la versione del runtime PHP
dell'ambiente di analisi da utilizzare. Al momento della stesura di questo articolo, App Engine ha una sola versione
dell'ambiente PHP, 1
. Se in futuro vengono apportate modifiche che potrebbero non essere
con le versioni precedenti, il team di App Engine utilizzerà una nuova versione
identificativo dell'utente. La tua app continuerà a utilizzare la versione selezionata finché non cambierai
l'impostazione api_version
e caricherai l'app.
Per maggiori informazioni sul file app.yaml
e su come eseguire il deployment dell'app nell'app
di Google, consulta il riferimento app.yaml
,
e Deployment di un'app PHP
argomenti.
Sabbiera
Per consentire ad App Engine di distribuire le richieste per le applicazioni su più server web e per impedire a un'applicazione di interferire con un'altra, l'applicazione viene eseguita in un ambiente "sandbox" limitato. In questo ambiente, l'applicazione può eseguire codice, utilizzare la posta di App Engine, recuperare gli URL e i servizi per gli utenti, esaminare la richiesta web dell'utente e preparare la risposta.
Un'applicazione App Engine non può:
scrivere nel file system. Le applicazioni PHP possono utilizzare Google Cloud Storage per per l'archiviazione di file permanenti. La lettura dal file system consentiti e tutti i file dell'applicazione caricati con quest'ultima sono disponibili.
rispondono lentamente. Le richieste web a un'applicazione devono essere gestite secondi. I processi che richiedono molto tempo per rispondere vengono interrotti per evitare di sovraccaricare il server web.
effettuare altri tipi di chiamate di sistema.
Caricamento automatico dei corsi
Sia le classi della libreria PHP standard (SPL) sia le eventuali classi che fanno parte dell'SDK per App Engine vengono caricate automaticamente quando necessario. Ciò significa che non devi utilizzare istruzioni include
o require
nella parte superiore degli script PHP.
Per impostazione predefinita, il caricamento automatico dei corsi viene eseguito solo per i corsi definiti nei file.
che risiedono nella directory root dell'SDK per la directory radice di App Engine (e, se
è stato specificato da --php_executable_path
, la tua installazione PHP locale).
Per aggiungere altri percorsi da cercare per il caricamento automatico delle classi, utilizza
set_include_path
nello script PHP.
set_include_path('my_additional_path' . PATH_SEPARATOR . get_include_path());
Estensioni attive
Le seguenti estensioni sono state abilitate nel runtime di PHP per App Engine:
- apc
- bcmath
- calendario
- Nucleo
- ctype
- data
- Dom
- Ereg
- exif
- filtro
- ftp
- gd
- hash
- iconv
- json
- libxml
- mailparse
- mbstring
- mcrypt
- memcache
- memcached
- mysql
- mysqli
- mysqlnd
- OAuth
- openssl
- pcre
- PDO
- pdo_mysql
- Riflessione
- sessione
- shmop
- SimpleXML
- sapone
- socket (per le app con fatturazione abilitata)
- SPL
- standard
- tokenizzatore
- XML
- lettore xml
- xmlwriter
- xls
- zip
- zlib
Estensioni caricabili dinamicamente
Le seguenti estensioni sono caricabili dinamicamente configurando php.ini
.
- cURL: questa estensione utilizza il servizio socket per effettuare richieste ed è soggetta alle quote e alle limitazioni di questi servizi. Vedi In uscita Richieste di ulteriori informazioni informazioni.
- MongoDB: questa estensione consente una di connettersi a un'istanza MongoDB esistente. Utilizza lo standard per effettuare richieste ed è ai sensi dell'applicazione quota e restrizioni.
- ImageMagick
- fileinfo
Per attivare queste estensioni, aggiungi istruzioni corrispondenti nel file php.ini
sotto extension
in questo modo:
extension = "curl.so"
extension = "mongo.so"
extension = "imagick.so"
extension = "intl.so"
extension = "fileinfo.so"
Sessioni
La maggior parte delle applicazioni web ha bisogno di un modo per conservare le informazioni sullo stato dell'utente tra le richieste. PHP fornisce un pratico livello di gestione delle sessioni. Le sessioni in App Engine funzionano in modo molto simile alle sessioni in qualsiasi altra applicazione PHP.
Impostare una variabile nella sessione di un utente:
session_start();
$_SESSION['Foo'] = 'Bar';
In seguito a una richiesta successiva dello stesso utente:
session_start();
print $_SESSION['Foo']; // prints Bar
Per impostazione predefinita, il runtime di App Engine utilizzerà memcache per archiviare la sessione
le informazioni utilizzando
MemcacheSessionHandler
. Puoi modificare questo comportamento specificando il tuo gestore di sessioni utilizzando
PHP
session_set_save_handler()
. Memcache consente di salvare e recuperare rapidamente i dati della sessione, il che significa che il sovraccarico della richiesta è minimo. Tuttavia, i dati in App Engine
Memcache potrebbe essere svuotata periodicamente, il che significa che tutte le informazioni sulla sessione
hanno perso. Per sessioni più lunghe, può essere preferibile utilizzare un servizio di archiviazione alternativo come Cloud SQL.
Chiavi speciali $_SERVER
PHP rende disponibile l'array speciale $_SERVER[]
nell'ambito della richiesta. Oltre ai parametri CGI standard, App Engine aggiunge alcune chiavi utili aggiuntive.
APPLICATION_ID
: l'app_id dell'applicazione impostata al momento della creazione dell'app. ad es. my-wordpressAUTH_DOMAIN
: il dominio utilizzato per autenticare gli utenti con l'API Users. Le app ospitate su appspot.com hanno un valore AUTH_DOMAIN di gmail.com e accettano qualsiasi account Google. Le app ospitate su un dominio personalizzato che utilizza Google Workspace hanno un valore AUTH_DOMAIN uguale al dominio personalizzatoCURRENT_VERSION_ID
: la versione maggiore e minore dell'applicazione attualmente in esecuzione, ad esempio "X.Y". Il numero di versione principale ("X") è specificato nel file app.yaml dell'app. Il numero di versione secondario ("Y") viene impostato automaticamente quando ogni versione dell'app viene caricata in App Engine. Sul server web di sviluppo, la versione minore è sempre "1".DEFAULT_VERSION_HOSTNAME
- Il nome host della versione predefinita dell'applicazione, ad esempio my-php-app.uc.r.appspot.com.HTTP_X_APPENGINE_CITY
- Nome della città da cui ha avuto origine la richiesta. Ad esempio, una richiesta dalla città di Mountain View potrebbe avere il valore dell'intestazione mountain view.HTTP_X_APPENGINE_CITYLATLONG
: latitudine e longitudine della città da cui ha avuto origine la richiesta. La stringa potrebbe avere il seguente aspetto: "37.386051,-122.083851" per una richiesta da Mountain View.HTTP_X_APPENGINE_COUNTRY
- Il paese da cui ha avuto origine la richiesta, come codice paese ISO 3166-1 alpha-2. App Engine determina questo codice dall'indirizzo IP del client.HTTP_X_APPENGINE_REGION
: il nome della regione da cui ha avuto origine la richiesta. Questo valore ha senso solo nel contesto del paese inX-Appengine-Country
. Ad esempio, se il paese è "US" e la regione è "ca", ovvero "ca" significa "California", non Canada.USER_EMAIL
- Restituisce l'indirizzo email dell'utente, se è stato autenticato utilizzando l'API Users. Le applicazioni devono utilizzare un nickname per i nomi visualizzabili.USER_ID
- Se l'indirizzo email è associato a un Account Google, user_id restituisce l'ID permanente univoco dell'utente, ovvero una str. Se sono stati autenticati mediante l'API Users. Questo ID è sempre lo stesso per l'utente, indipendentemente dal fatto che quest'ultimo modifichi o meno il proprio indirizzo email.USER_IS_ADMIN
- 1 se l'utente che ha eseguito l'accesso è anche un amministratore dell'applicazione, se è stato autenticato utilizzando l'API Users. 0 negli altri casi.USER_NICKNAME
- Per gli utenti di Account Google, il nickname è il "nome" dell'indirizzo email dell'utente, se quest'ultimo si trova nello stesso dominio dell'applicazione, o altrimenti con l'indirizzo email completo dell'utente.USER_ORGANIZATION
- Un'applicazione che usa l'impostazione Account Google può determinare se l'utente che ha eseguito l'accesso utilizza un Account Google personale o un account gestito da un dominio Google Workspace.
Aggiornamento del comportamento di PHP_SELF
e SCRIPT_NAME
nella versione 1.9.0
L'implementazione di $_SERVER['SCRIPT_NAME']
e $_SERVER['PHP_SELF'
] precedente alla versione 1.9.0 è molto diversa da quella successiva alla versione 1.9.0. Le modifiche sono state apportate
essere coerente con l'implementazione di Apache generalmente prevista da PHP
diverse applicazioni.
I seguenti esempi mostrano la differenza.
Prima della versione 1.9.0 | Dopo la versione 1.9.0 |
---|---|
app.yaml: - url: /.* script: index.php |
|
REQUEST_URI: / SCRIPT_FILENAME: /path/to/index.php SCRIPT_NAME: / PHP_SELF: / |
REQUEST_URI: / SCRIPT_FILENAME: /path/to/index.php SCRIPT_NAME: /index.php PHP_SELF: /index.php |
REQUEST_URI: /bar SCRIPT_FILENAME: /path/to/index.php SCRIPT_NAME: /bar PHP_SELF: /bar |
REQUEST_URI: /bar SCRIPT_FILENAME: /path/to/index.php SCRIPT_NAME: /index.php PHP_SELF: /index.php |
REQUEST_URI: /index.php/foo/bar SCRIPT_FILENAME: /path/to/index.php SCRIPT_NAME: /index.php/foo/bar PHP_SELF: /index.php/foo/bar |
REQUEST_URI: /index.php/foo/bar SCRIPT_FILENAME: /path/to/index.php SCRIPT_NAME: /index.php PHP_SELF: /index.php/foo/bar |
REQUEST_URI: /test.php/foo/bar SCRIPT_FILENAME: /path/to/index.php SCRIPT_NAME: /test.php/foo/bar PHP_SELF: /test.php/foo/bar |
REQUEST_URI: /test.php/foo/bar SCRIPT_FILENAME: /path/to/index.php SCRIPT_NAME: /index.php PHP_SELF: /index.php |
app.yaml: - url: /.* script: foo/index.php |
|
REQUEST_URI: /bar SCRIPT_FILENAME: /path/to/foo/index.php SCRIPT_NAME: /bar PHP_SELF: /bar |
REQUEST_URI: /bar SCRIPT_FILENAME: /path/to/foo/index.php SCRIPT_NAME: /foo/index.php PHP_SELF: /foo/index.php |
Direttive con nuovi valori predefiniti di inizializzazione
Questa tabella specifica le direttive di cui i valori predefiniti di inizializzazione sono diversi da quelli forniti con l'interprete PHP standard disponibile su php.net. Puoi eseguire l'override di queste direttive predefinite includendole in un file php.ini per la tua applicazione.
Direttiva | Valore predefinito in App Engine |
---|---|
detect_unicode |
false |
session.gc_maxlifetime |
600 |
session.cookie_secure |
600 |
session.cookie_httponly |
1 |
session.use_only_cookies |
1 |
display_errors |
0 |
display_startup_errors |
0 |
html_errors |
0 |
log_errors |
1 |
file_uploads |
0 |
upload_max_filesize |
262144 |
max_file_uploads |
0 |
date.timezone |
UTC |
sendmail_path |
null |
allow_url_fopen |
1 |
allow_url_include |
0 |
enable_dl |
0 |
expose_php |
Off |
register_globals |
Off |
magic_quotes_gpc |
0 |
mysqlnd.collect_statistics |
0 |
mysql.allow_local_infile |
0 |
mysqli.allow_local_infile |
0 |
Funzioni disabilitate
Per motivi di sicurezza o per compatibilità con l'ambiente di esecuzione di App Engine, alcune funzioni PHP sono state disattivate. Alcuni di questi possono essere riattivate esplicitamente php.ini per i tuoi un'applicazione.
Funzioni disattivate definitivamente
Le seguenti funzioni sono state disattivate definitivamente in App Engine:
disk_free_space()
disk_total_space()
diskfreespace()
escapeshellarg() and escapeshellcmd()
exec()
highlight_file()
lchgrp(), lchown(), link(), and symlink()
passthru()
pclose() and popen()
proc_close(), prog_get_status(), proc_nice(), proc_open(), and proc_terminate()
set_time_limit()
shell_exec()
show_source()
system()
App Engine non include
pcntl
dell'estensione, pertanto le funzioni fornite da pcntl
non sono
disponibili per le app PHP
in esecuzione in App Engine.
Assistenza di tempnam()
e sys_get_temp_dir()
Le app di App Engine vengono eseguite in una sandbox per la sicurezza che non consente la scrittura
al file system locale. Per questo motivo, la versione di App Engine
tempnam()
restituisce un
un file temporaneo in memoria che può essere scritto in una soluzione di archiviazione permanente come
Bucket Google Cloud Storage
in un secondo momento.
Ecco un esempio su come scrivere nel file temporaneo in memoria utilizzando
file_put_contents()
e fwrite()
.
<?php
$dir = sys_get_temp_dir();
$tmp = tempnam($dir, “foo”);
file_put_contents($tmp, “hello”)
$f = fopen($tmp, “a”);
fwrite($f, “ world”);
fclose($f)
echo file_get_contents($tmp);
L'output previsto dall'esempio sarebbe:
hello world
Funzioni parzialmente limitate
Il runtime App Engine per PHP non supporta il modificatore di pattern /e
delle funzioni preg_replace()
e mb_ereg_replace()
. Consulta la documentazione di PREG_REPLACE_EVAL
per la notifica di ritiro e un esempio di come aggiornare il codice in modo da utilizzare preg_replace_callback()
.
Funzioni che possono essere abilitate manualmente
Questo elenco specifica la funzione PHP che deve essere attivata manualmente utilizzando la direttiva google_app_engine.enable_functions
nel file php.ini per l'applicazione.
gc_collect_cycles()
,gc_enable()
,gc_disable()
egc_enabled()
getmypid()
getmyuid()
egetmygid()
getrusage()
getmyinode()
get_current_user()
libxml_disable_entity_loader()
*parse_str()
phpinfo()
phpversion()
php_uname()
php_sapi_name()
Puoi anche disattivare manualmente le funzioni utilizzando la direttiva disable_functions
nel file php.ini della tua applicazione.
Funzioni che richiedono l'abilitazione della fatturazione
Le seguenti funzioni utilizzano i socket e sono quindi disponibili solo per le app con fatturazione abilitata.
- Tutte le funzioni di rete tranne
gethostname()
- tutte le funzioni socket
- Tutte le funzioni FTP
- cURL, a meno che non utilizzi cURL Lite
Connessioni TCP/IP ai server MySQL (Cloud SQL può essere utilizzato solo con un socket UNIX)
Supporto per lo streaming
Wrapper stream PHP I/O supportati
Sono supportati i seguenti wrapper per stream di I/O PHP:
- php://input
- php://output
- php://memory
- php://temp
Wrapper di stream
Molte funzioni in PHP, ad esempio fopen()
o file_get_contents()
, sfruttano
dell'interfaccia dei flussi di PHP per supportare diversi protocolli.
Di seguito è riportato un elenco di wrapper dello stream integrati che vengono registrati automaticamente e sono disponibili nel runtime di App Engine.
file://
glob://
http://
(si comporta come il gestore di flussi http integrato di PHP, ma utilizza il servizio URLfetch di App Engine)https://
(viene utilizzato il servizio di recupero URL di App Engine)ftp://
gs://
(il gestore dei flussi per Google Cloud Storage)zlib://
Di seguito è riportato un elenco di gestori di stream integrati che non sono supportati App Engine e la loro registrazione è stata annullata.
data://
expect://
ogg://
phar://
rar://
ssh2://
Trasporti stream disattivati
I seguenti trasporti di stream sono stati disattivati.
ssl
sslv2
sslv3
tcp
tls
udg
udp
unix
PHP puro
Tutto il codice per l'ambiente di runtime PHP deve essere puro PHP. App Engine non ti consente di caricare le tue estensioni C.
L'ambiente include la libreria standard PHP. Alcune estensioni sono state disabilitate perché le loro funzioni di base non sono supportate da App Engine, ad esempio la rete e la scrittura nel file system.
Puoi includere altre librerie PHP pure nella tua applicazione inserendo il codice nella directory dell'applicazione, ovvero la stessa directory che contiene il file app.yaml
.
Ad esempio, puoi creare un link simbolico nella directory dell'applicazione che rimanda alla directory di una biblioteca. Poi il link viene seguito e la libreria viene incluso nella tua applicazione quando esegui il deployment in App Engine.
Puoi anche includere le librerie PHP specificando le direttive php.ini
e includendo le istruzioni PHP include
nel codice. Tuttavia, l'alternativa preferita è utilizzare uno strumento di gestione delle dipendenze PHP come Composer.
Esempi:
Se includi la directory radice dell'applicazione nella
include_path
del tuo filephp.ini
:include_path=".:/[ROOT_DIR]/myapp"
Puoi quindi utilizzare
include
oppureinclude_once
per includere i file PHP relativi ainclude_path
:include_once 'myfile.php';
Se scegli di utilizzare Composer per includere le tue librerie PHP pure, puoi semplicemente includere un singolo file dopo l'installazione delle dipendenze:
require_once 'vendor/autoload.php';
Quando utilizzi Composer per installare le dipendenze dell'applicazione, tutti i pacchetti vengono aggiunti nella directory dell'applicazione in
vendor
, dove viene generato anche il fileautoload.php
.
Strumenti
L'SDK for App Engine include per testare l'applicazione e caricare i file dell'applicazione.
Il server di sviluppo esegue la tua applicazione sul computer locale per testarla.
Lo strumento gcloud
gestisce tutte le interazioni a riga di comando con l'applicazione in esecuzione su App Engine. Utilizza gcloud app deploy
per caricare l'applicazione su App Engine o per aggiornare i singoli file di configurazione. Puoi anche
Visualizzare i dati di log dell'app al fine di analizzarne le prestazioni utilizzando
strumenti personalizzati.
Codice sorgente dell'interprete PHP
Puoi scaricare il codice sorgente per l'interprete PHP di App Engine, Repository appengine-php in GitHub.
Contemporaneità e latenza
La latenza della tua applicazione ha l'impatto maggiore sul numero di istanze necessarie per gestire il tuo traffico. Se elabori le richieste rapidamente, una singola istanza può gestire molte richieste.
Variabili di ambiente
Le seguenti variabili di ambiente sono impostate dal runtime:
Variabile di ambiente | Descrizione |
---|---|
GAE_APPLICATION
|
L'ID della tua applicazione App Engine. Questo ID è preceduto dal prefisso "region code~" ad esempio "e~" per le applicazioni distribuite in Europa. |
GAE_DEPLOYMENT_ID |
L'ID del deployment attuale. |
GAE_ENV |
L'ambiente App Engine. Impostata su standard . |
GAE_INSTANCE |
L'ID dell'istanza su cui è attualmente in esecuzione il servizio. |
GAE_RUNTIME |
Il runtime specificato nel file app.yaml . |
GAE_SERVICE |
Il nome del servizio specificato nel file app.yaml . Se non viene specificato alcun nome di servizio, viene impostato su default . |
GAE_VERSION |
L'etichetta della versione corrente del servizio. |
GOOGLE_CLOUD_PROJECT |
L'ID progetto Google Cloud associato alla tua applicazione. |
PORT |
La porta che riceve le richieste HTTP. |
Puoi definire variabili di ambiente aggiuntive nel file app.yaml
,
ma i valori precedenti non possono essere sostituiti.