In questa pagina viene descritto come installare e utilizzare con il runtime PHP per nell'ambiente standard di App Engine. La tua app può accedere ai servizi in bundle tramite l'SDK dei servizi App Engine per PHP.
Prima di iniziare
Consulta l'elenco di API dei servizi in bundle legacy puoi chiamare il runtime PHP.
Aggiorna il tuo
app.yaml
per includere la seguente riga:app_engine_apis: true
Per testare l'app PHP, devi eseguirne il deployment utilizzando
gcloud app deploy
Installazione dell'SDK di PHP App Engine
Puoi trovare l'SDK di PHP App Engine su GitHub all'indirizzo
appengine-php-sdk
È necessario utilizzare la versione 2.1 o successiva per PHP 8.1+ e la versione 2.0.1 o successiva per PHP 7.x.
Esistono due modi per incorporare l'SDK nel tuo progetto:
Esegui il comando Packagist per aggiungere l'SDK al tuo file
composer.json
:composer require google/appengine-php-sdk
Crea manualmente un file
composer.json
con i seguenti dettagli:8/7 PHP
{ "require": { "google/appengine-php-sdk": "^2.1" // Or any later version } }
In PHP, le API di App Engine richiedono una specifica esplicita delle dipendenze. Consulta questo documento per istruzioni su come includere autoload.php
.
Importazione delle librerie
Utilizza l'operatore use
per importare la classe che ti serve dall'elenco di
API disponibili. Ad esempio:
Google\AppEngine\Api\AppIdentity\ClassName
può essere importato con l'istruzione:
use Google\AppEngine\Api\AppIdentity\ClassName;
Considerazioni sulla migrazione
Identità app
Non è necessario apportare modifiche alla configurazione dell'app quando esegui l'upgrade a Comportamento, funzionalità e istruzioni di configurazione per l'app L'API Identity rimane invariata. Consulta le Panoramica dell'identità API e Guida di riferimento dell'API App Identity per ulteriori dettagli.
Posta
L'API Mail di PHP rimane per lo più uguale all'API Mail di PHP 5, con alcune lievi differenze come abilitare e disabilitare i servizi di posta. Le seguenti sezioni trattano le differenze tra i due runtime.
Classe messaggio
In PHP, la classe Message
funziona come in PHP
PHP 5.5, tranne per il fatto che sono state aggiornate le importazioni di use
. Le differenze sono
che segue:
PHP 5.5
use google\appengine\api\mail\Message;
8/7 PHP
use Google\AppEngine\Api\Mail\Message;
Se non riesci a modificare le istruzioni di importazione, il file PHP 5.5 originale funzionerà anche per PHP.
Funzione di posta
In PHP 5.5, il linguaggio PHP nativo mail()
è stata sovraccaricata
Funzione Mail di App Engine.
In PHP, la funzione Mail di App Engine non è più sovraccarica e deve essere esplicitamente abilitato. Questo nuovo comportamento ti consente di riutilizzare Funzione Mail per soddisfare al meglio le tue esigenze. Questa modifica ti consente anche visibilità sull'implementazione attualmente in uso per tutta la posta chiamate di funzione.
Se preferisci utilizzare la funzione nativa mail()
di PHP per inviare la posta tramite la
L'API Mail di App Engine, puoi abilitarla nel file php.ini
come segue:
extension = mailparse.so
sendmail_path = "php ./vendor/google/appengine-php-sdk/src/Runtime/SendMail.php -t -i"
Come mostrato nell'esempio precedente, aggiungi l'estensione mailparse per abilitare la
funzione di posta PHP nativa e imposta la configurazione di runtime sendmail_path
su
l'implementazione della funzione Mail di App Engine. Dopo l'attivazione,
le chiamate a mail()
funzioneranno esattamente come in PHP 5.5.
Fai riferimento ai campi Invio della posta e Ricezione della posta guide e la guida di riferimento dell'API Mail per ulteriori dettagli.
Memcache
Per utilizzare Memcache per PHP, devi aggiungere un'etichetta esplicita delle librerie memcache. In precedenza, Memcache per PHP 5.5 non richiedono una dichiarazione esplicita. Questa dichiarazione esplicita consente per passare dalla memcache PHP nativa alla memcache di App Engine.
Le classi PHP Memcache hanno lo stesso comportamento della memcache PHP 5 classi, ad eccezione della dichiarazione esplicita. Consulta le Panoramica di Memcache per ulteriori dettagli.
PHP 5.5
Esempio di Memcache per PHP 5.5:
$memcache = new Memcache();
return $memcache->get($key);
Esempio di Memcached per PHP 5.5:
$memcache = new Memcached();
$memcache->set('who', $request->get('who'));
return $twig->render('memcache.html.twig', [
'who' => $request->get('who'),
'count' => $memcache->increment('count', 1, 0),
'host' => $request->getHost(),
]);
8/7 PHP
Esempio di API Memcache per PHP:
use Google\AppEngine\Api\Memcache\Memcache;
$memcache = new Memcache();
return $memcache->get($key);
Esempio di API Memcached per PHP:
use Google\AppEngine\Api\Memcache\Memcached;
$memcache = new Memcached();
$memcache->set('who', $request->get('who'));
return $twig->render('memcache.html.twig', [
'who' => $request->get('who'),
'count' => $memcache->increment('count', 1, 0),
'host' => $request->getHost(),
]);
Se preferisci utilizzare il comportamento originale di Memcache per PHP 5 in
PHP, puoi continuare a richiamare implicitamente Memcache includendo
qualche altra riga nel file composer.json
. Dopo l'importazione
Pacchetto appengine-php-sdk
da Composer, aggiungi il seguente percorso del file per l'attivazione
all'elemento files
nella sezione autoload
:
8/7 PHP
{
"require": {
"google/appengine-php-sdk": "^2.1" // Or any later version
},
"autoload": {
"files": [
"./vendor/google/appengine-php-sdk/src/Api/Memcache/MemcacheOptIn.php"
]
}
}
Moduli
Non è necessario apportare modifiche alla configurazione dell'app quando esegui l'upgrade a Il comportamento, le funzionalità e le istruzioni di configurazione dell'API Modules rimangono allo stesso modo. Fai riferimento alla panoramica dei moduli e la guida di riferimento dell'API Forms per ulteriori dettagli.
Sessione
Sessioni PHP
funziona allo stesso modo delle Sessioni PHP 5.5.
Tuttavia, le istruzioni di configurazione sono diverse perché le sessioni PHP 5.5 utilizzavano
MemcacheSessionHandler
per impostazione predefinita.
Per utilizzare le sessioni per PHP, devi registrare il
MemcacheSessionHandler
corso con session_set_save_handler()
e configura session.save_path
in Memcache. Ti consigliamo inoltre di attivare Memcache per accedere alle informazioni Memcache.
Ad esempio:
8/7 PHP
ini_set('session.save_path', 'Google\AppEngine\Api\Memcache\Memcache');
session_set_save_handler(new Google\AppEngine\Ext\Session\MemcacheSessionHandler(), true);
Consulta le Guida di riferimento dell'API Session per ulteriori dettagli.
Coda di attività
Non è necessario apportare modifiche alla configurazione dell'app quando esegui l'upgrade a Il comportamento, le funzionalità e le istruzioni di configurazione della coda di attività rimangono allo stesso modo. Fai riferimento alla sezione Sessioni Panoramica delle code di attività e Guida di riferimento dell'API Tasks Queue per ulteriori dettagli.
Recupero URL
Per utilizzare il Recupero URL per PHP, devi aggiungere una dichiarazione esplicita dell'URL Recupera librerie. In precedenza, il servizio di recupero URL per PHP 5 non richiedevano una dichiarazione esplicita ed è stato utilizzato implicitamente.
In PHP 5, il servizio di recupero URL di App Engine era l'unico modo per recuperare
contenuto Internet in PHP 5.5, quindi la maggior parte delle funzioni di PHP 5.5 che accedevano
è stata applicata la patch di internet per utilizzare automaticamente UrlFetch
.
In PHP, il networking PHP nativo può accedere a Internet, quindi questo
l'applicazione delle patch non è completata. In alcuni casi, puoi utilizzare il valore originale UrlFetch
meccanismo di attenzione, in particolare il meccanismo che fornisce
X-Appengine-Inbound-Appid
per identificare l'app di App Engine che sta eseguendo una
all'app di App Engine.
Per attivare il Recupero URL per PHP, puoi utilizzare una dichiarazione esplicita in
il wrapper dello stream oppure usa direttamente la classe UrlFetch
, descritta nell'
le sezioni seguenti.
Opzione 1a. Gestori degli stream
Puoi abilitare il servizio di recupero URL di App Engine per effettuare richieste HTTP
gestore di stream PHP http://
e https://
. Per farlo:
- Annulla la registrazione del gestore di flussi PHP nativo per HTTP(S) utilizzando
stream_wrapper_unregister()
- Registra HTTP(S) nella classe
UrlFetchStream
utilizzandostream_wrapper_register()
- Chiama il numero
file_get_contents()
con la configurazione su cui vuoi usare il wrapper stream.- Se vuoi tornare al gestore di flussi PHP nativo dall'URL
Recupera il servizio, usa
stream_wrapper_unregister()
e poi registrati utilizzandostream_wrapper_restore()
.
- Se vuoi tornare al gestore di flussi PHP nativo dall'URL
Recupera il servizio, usa
Per un confronto, vedi gli esempi equivalenti per PHP 5 e PHP:
PHP 5.5
...
$context = [
'http' => [
'method' => 'POST',
'header' => $headers,
'content' => http_build_query($data),
]
];
$context = stream_context_create($context);
// Using Url Fetch service. No option to use the native php stream wrapper.
$result = file_get_contents('http://example.com', false, $context);
echo $result;
8/7 PHP
use google\appengine\api\urlfetch\UrlFetchStream;
...
$context = [
'http' => [
'method' => 'POST',
'header' => $headers,
'content' => http_build_query($data),
]
];
$context = stream_context_create($context);
// Using the native php stream wrapper.
$result = file_get_contents('http://example.com', false, $context);
echo $result;
stream_wrapper_unregister("http");
stream_wrapper_register("http", "UrlFetchStream");
// Now using the Url Fetch service.
$result = file_get_contents('http://example.com', false, $context);
echo $result;
stream_wrapper_unregister("http");
stream_wrapper_restore("http");
// Now using the native php stream wrapper again.
Opzione 1b. Intestazioni delle risposte HTTP con gestori del flusso
Le istruzioni per utilizzare le intestazioni delle risposte HTTP(S) con i gestori di flussi sono riportate in modo simile alle istruzioni per l'uso dei gestori di streaming:
- Annulla la registrazione del gestore di flussi PHP nativo per HTTP(S) utilizzando
stream_wrapper_unregister()
. - Registra HTTP(S) nella classe
UrlFetchStream
utilizzandostream_wrapper_register()
. - Utilizza
fopen()
anzichéfile_get_contents()
con la configurazione che preferisci. - Chiama
stream_get_meta_data()
ed estrai le informazioni dell'intestazione della risposta tramite metadati di indicizzazione per'wrapper_data
. Le intestazioni delle risposte vengono restituite un formato array simile a quello di$http_response_header
in PHP 5.5.
PHP 5.5
...
$context = [
'http' => [
'method' => 'POST',
'header' => $headers,
'content' => http_build_query($data),
]
];
$context = stream_context_create($context);
// Using file_get_contents and the Url Fetch service.
$result = file_get_contents('http://example.com', false, $context);
// Print Http Response Headers
print_r($http_response_header);
8/7 PHP
use google\appengine\api\urlfetch\UrlFetchStream;
...
$context = [
'http' => [
'method' => 'POST',
'header' => $headers,
'content' => http_build_query($data),
]
];
$context = stream_context_create($context);
stream_wrapper_unregister("http");
stream_wrapper_register("http", "UrlFetchStream");
// Now using fopen and the Url Fetch service.
$result = fopen('http://example.com', 'r', false, $context);
// Print Http Response Headers
$meta_data = stream_get_meta_data($result);
$headers = $meta_data['wrapper_data'];
print_r($headers);
stream_wrapper_unregister("http");
stream_wrapper_restore("http");
Opzione 2. Classe UrlFetch
La classe UrlFetch
è una classe personalizzata che fornisce un modo più mirato
dell'utilizzo del servizio di recupero URL per una richiesta HTTP(S) in un ambito più ristretto.
A differenza dell'opzione di gestore dello stream, la classe UrlFetch
non esegue l'override di tutti
Richieste HTTP(S) effettuate da funzioni compatibili con wrapper streaming per utilizzare il parametro
Servizio di recupero URL. Rispetto all'opzione di gestore dello stream, la classe UrlFetch
è anche più semplice, in quanto non richiede l'uso di vari file PHP
API come:
stream_context_create()
stream_wrapper_unregister()
stream_wrapper_register()
file_get_contents()
Il seguente esempio di classe UrlFetch
è equivalente all'esempio di gestore del flusso:
8/7 PHP
use google\appengine\api\urlfetch\UrlFetch;
...
$urlfetch = new UrlFetch();
$result = $urlfetch->fetch($url, 'POST', $headers, http_build_query($data));
echo $result->getContent();
Utenti
Non è necessario apportare modifiche alla configurazione dell'app quando esegui l'upgrade a Il comportamento, le funzionalità e le istruzioni di configurazione per l'API Users rimangono allo stesso modo. Fai riferimento al Panoramica dell'API Users e Guida di riferimento dell'API Users per ulteriori dettagli.
Biblioteche raccolte dalla community
Puoi utilizzare l'API della community per
datastore
durante l'upgrade a PHP.
Altre considerazioni
Per testare la funzionalità dei servizi in bundle legacy nella tua app PHP, puoi utilizzare il server di sviluppo locale. Quando esegui il comando
dev_appserver.py
, imposta--php_executable_path
a un eseguibile PHP. Tieni presente che si tratta di una soluzione diversa da PHP 5, richiede un eseguibile php-cgi.Se il progetto ha un file
composer.json
, imposta--php-composer-path
su del filecomposer.phar
.Per eseguire il deployment della tua app, utilizza
gcloud app deploy
.Il logging nel runtime di PHP segue lo standard di logging in Cloud Logging. Nel runtime PHP, i log delle app non sono più in bundle con i log delle richieste, ma sono separati in diversi record. Per ulteriori informazioni sulla lettura e sulla scrittura di log, consulta Guida alla scrittura e alla visualizzazione dei log.
Esempi
Per esempi di come utilizzare i servizi in bundle legacy con PHP, scarica gli esempi di codice.