In questa pagina viene descritto come installare e utilizzare i servizi in bundle con il runtime PHP per l'ambiente standard di App Engine. L'app può accedere ai servizi in bundle tramite l'SDK dei servizi App Engine per PHP.
Prima di iniziare
Fai riferimento all'elenco di API dei servizi in bundle legacy che puoi chiamare nel runtime PHP.
Aggiorna il file
app.yaml
in modo da 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 delle 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 PHP. Il comportamento, le funzionalità e le istruzioni di configurazione dell'API App Identity rimangono invariati. Per ulteriori dettagli, consulta la panoramica di API Identity e la guida di riferimento dell'API App Identity.
L'API Mail di PHP è praticamente la stessa dell'API Mail di PHP 5, con alcune piccole differenze sulle modalità di attivazione e disattivazione dei servizi Mail. Le sezioni seguenti illustrano le differenze tra i due runtime.
Classe messaggio
In PHP, la classe Message
funziona come in
PHP 5.5, ma le importazioni di use
sono state aggiornate. Le differenze sono le seguenti:
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, anche la dichiarazione di importazione originale di PHP 5.5 funzionerà per PHP.
Funzione di posta
In PHP 5.5, la funzione PHP mail()
nativa è stata sovraccarica dalla funzione Mail di App Engine.
In PHP, la funzione Mail di App Engine non è più sovraccarica per impostazione predefinita e deve essere abilitata in modo esplicito. Questo nuovo comportamento consente di riutilizzare la funzione Mail per adattarla meglio alle tue esigenze. Questa modifica ti consente anche di sapere quale implementazione viene attualmente utilizzata per tutte le chiamate alla funzione Mail.
Se preferisci utilizzare la funzione PHP mail()
nativa per inviare posta tramite l'API Mail di App Engine, puoi abilitarla nel file php.ini
nel seguente modo:
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
sull'implementazione della funzione Mail di App Engine. Dopo l'attivazione, tutte le chiamate a mail()
funzioneranno esattamente come in PHP 5.5.
Per ulteriori dettagli, consulta le guide Invio di posta e Ricezione della posta e la guida di riferimento per l'API Mail.
Memcache
Per utilizzare Memcache per PHP, devi aggiungere una dichiarazione esplicita delle librerie Memcache. In precedenza, Memcache per PHP 5.5 non richiedeva una dichiarazione esplicita. Questa dichiarazione esplicita consente la flessibilità di passare dalla Memcache PHP nativa alla memcache di App Engine.
Le classi memcache PHP hanno lo stesso comportamento delle classi Memcache PHP 5, ad eccezione della dichiarazione esplicita. Per ulteriori dettagli, consulta la Panoramica di Memcache.
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 chiamare Memcache in modo implicito includendo
qualche riga in più nel file composer.json
. Dopo aver importato il pacchetto appengine-php-sdk
da Composer, aggiungi il seguente percorso del file di 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 PHP. Il comportamento, le funzionalità e le istruzioni di configurazione per l'API Modules rimangono invariati. Per ulteriori dettagli, consulta la panoramica dei moduli e la guida di riferimento dell'APIModules.
Session
Le sessioni PHP
funzionano come le sessioni PHP 5.5.
Tuttavia, le istruzioni di configurazione sono diverse perché le sessioni PHP 5.5 utilizzavano la classe MemcacheSessionHandler
per impostazione predefinita.
Per utilizzare Sessions per PHP, devi registrare la classe
MemcacheSessionHandler
con session_set_save_handler()
e configurare 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);
Per ulteriori dettagli, consulta la Guida di riferimento dell'API Session.
Coda di attività
Non è necessario apportare modifiche alla configurazione dell'app quando esegui l'upgrade a PHP. Il comportamento, le funzionalità e le istruzioni di configurazione della coda di attività rimangono invariati. Per ulteriori dettagli, consulta la sezione Sessioni della guida Panoramica delle code di attività e la guida di riferimento dell'API Tasks Queue.
Recupero URL
Per utilizzare il metodo di recupero URL per PHP, devi aggiungere una dichiarazione esplicita delle librerie di recupero degli URL. In precedenza, il servizio di recupero URL per PHP 5 non richiedeva una dichiarazione esplicita ed era utilizzato implicitamente.
In PHP 5, il servizio di recupero URL di App Engine era l'unico modo per recuperare contenuti internet in PHP 5.5, quindi alla maggior parte delle funzioni di PHP 5.5 che accedevano a internet è stata applicata la patch per utilizzare UrlFetch
automaticamente.
In PHP, il networking PHP nativo può accedere a internet, perciò l'applicazione
di questa patch automatica non viene eseguita. In alcuni casi, puoi utilizzare il meccanismo originale di UrlFetch
, in particolare il meccanismo che fornisce l'intestazione della richiesta X-Appengine-Inbound-Appid
per identificare l'app di App Engine che invia una richiesta alla tua app di App Engine.
Per abilitare il recupero degli URL per PHP, puoi utilizzare una dichiarazione esplicita nel
wrapper dello stream oppure utilizzare direttamente la classe UrlFetch
, descritta nelle
sezioni seguenti.
Opzione 1a. Gestori degli stream
Puoi abilitare il servizio di recupero URL di App Engine per effettuare richieste HTTP a entrambi i gestori 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
file_get_contents()
con la configurazione che vuoi utilizzare con il wrapper stream.- Se vuoi tornare al gestore di flussi PHP nativo dal servizio di recupero URL, utilizza
stream_wrapper_unregister()
e registrati constream_wrapper_restore()
.
- Se vuoi tornare al gestore di flussi PHP nativo dal servizio di recupero URL, utilizza
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 l'utilizzo delle intestazioni delle risposte HTTP(S) con i gestori di flussi sono simili a quelle per l'utilizzo dei gestori di flussi:
- 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 indicizzando i metadati per'wrapper_data
. Le intestazioni delle risposte vengono restituite in 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 di utilizzare il servizio di recupero URL per una richiesta HTTP(S) in un ambito più limitato.
A differenza dell'opzione di gestore dello stream, la classe UrlFetch
non esegue l'override di tutte le richieste HTTP(S) effettuate dalle funzioni compatibili con wrapper dello stream per utilizzare il servizio di recupero URL. Rispetto all'opzione di gestore dei flussi, anche la configurazione della classe UrlFetch
è più semplice, in quanto non richiede l'utilizzo di varie API PHP 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 PHP. Il comportamento, le funzionalità e le istruzioni di configurazione per l'API Users rimangono invariati. Per ulteriori dettagli, consulta la panoramica dell'API Users e la guida di riferimento dell'API Users.
Biblioteche raccolte dalla community
Puoi utilizzare l'API fornita dalla 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 l'argomento--php_executable_path
su un eseguibile PHP. È diverso da PHP 5, che richiede un eseguibile php-cgi.Se il progetto ha un file
composer.json
, imposta--php-composer-path
nel percorso del filecomposer.phar
.Per eseguire il deployment della tua app, usa il comando
gcloud app deploy
.Il logging nel runtime PHP segue lo standard di logging di Cloud Logging. Nel runtime di PHP, i log delle app non vengono più abbinati ai log delle richieste, ma sono separati in record diversi. Per ulteriori informazioni sulla lettura e sulla scrittura dei log, consulta la guida Scrittura e visualizzazione dei log.
Esempi
Per visualizzare esempi di utilizzo dei servizi in bundle legacy con PHP, scarica gli esempi di codice.