Accesso ai servizi in bundle legacy per PHP

Questa pagina descrive come installare e utilizzare i servizi in bundle con il runtime PHP per l'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

  1. Consulta l'elenco di API dei servizi in bundle legacy puoi chiamare il runtime PHP.

  2. Aggiorna il file app.yaml in modo da includere la seguente riga:

    app_engine_apis: true
    
  3. Per testare l'app PHP, devi eseguirne il deployment utilizzando gcloud app deploy

Installazione dell'SDK 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 progetto:

  1. Esegui il comando Packagist per aggiungere l'SDK al tuo file composer.json:

    composer require google/appengine-php-sdk
    
  2. Crea manualmente un file composer.json con i seguenti dettagli:

    PHP 7/8

    {
        "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 necessaria 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 durante l'upgrade a PHP. Il comportamento, le funzionalità e le istruzioni di configurazione dell'API App Identity rimangono invariati. 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 sezioni seguenti illustrano le differenze tra i due runtime.

Classe messaggio

In PHP, la classe Message funziona come in PHP 5.5, tranne per il fatto che le importazioni di Message 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, l'istruzione di importazione PHP 5.5 originale funzionerà anche per PHP.

Funzione di posta

In PHP 5.5, la funzione mail() di PHP nativo è stata sovraccaricata dalla funzione Mail di App Engine.

In PHP, la funzione Mail di App Engine non è più sovraccaricata per impostazione predefinita e deve essere attivata esplicitamente. Questo nuovo comportamento ti consente di riutilizzare Funzione Mail per soddisfare al meglio le tue esigenze. Questa modifica ti consente inoltre di avere visibilità sull'implementazione attualmente in uso per tutte le chiamate della funzione Mail.

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 aver attivato questa opzione, tutte 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 una dichiarazione esplicita delle librerie Memcache. In precedenza, Memcache per PHP 5.5 non richiedeva una dichiarazione esplicita. Questa dichiarazione esplicita consente di passare facilmente da Memcache PHP nativo a Memcache di App Engine.

Le classi PHP Memcache hanno lo stesso comportamento delle classi PHP 5 Memcache, 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 chiamare Memcache in modo implicito includendo alcune altre righe 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:

PHP 7/8

{
  "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 invariati. Per maggiori dettagli, consulta la Panoramica dei moduli e la Guida di riferimento dell'API Modules.

Sessione

PHP Sessions funziona nello stesso modo di PHP 5.5 Sessions. 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:

PHP 7/8

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 all'API Session.

Coda di attività

Non è necessario apportare modifiche alla configurazione dell'app durante l'upgrade a PHP. Il comportamento, le funzionalità e le istruzioni di configurazione di Task Queue rimangono invariati. 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 URL Fetch per PHP, devi aggiungere una dichiarazione esplicita delle librerie URL Fetch. In precedenza, il servizio di recupero dell'URL per PHP 5 non richiedeva una dichiarazione esplicita ed era utilizzato in modo implicito.

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 meccanismo UrlFetch originale, in particolare quello che fornisce l'intestazione della richiesta X-Appengine-Inbound-Appid per identificare l'app App Engine che sta inviando una richiesta alla tua app App Engine.

Per attivare l'acquisizione di URL per PHP, puoi utilizzare una dichiarazione esplicita nel wrapper dello stream o utilizzare direttamente la classe UrlFetch, descritta nelle sezioni seguenti.

Opzione 1a. Gestori di stream

Puoi abilitare il servizio di recupero URL di App Engine per effettuare richieste HTTP gestore di stream PHP http:// e https://. Per farlo:

  1. Annulla la registrazione del gestore di flussi PHP nativo per HTTP(S) utilizzando stream_wrapper_unregister()
  2. Registra HTTP(S) alla classe UrlFetchStream utilizzando stream_wrapper_register().
  3. Chiama il numero file_get_contents() con la configurazione su cui vuoi usare il wrapper stream.

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;

PHP 7/8

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

Di seguito sono riportate le istruzioni per utilizzare le intestazioni delle risposte HTTP(S) con i gestori di flussi in modo simile alle istruzioni per l'uso dei gestori di streaming:

  1. Annulla la registrazione del gestore di flussi PHP nativo per HTTP(S) utilizzando stream_wrapper_unregister().
  2. Registra HTTP(S) nella classe UrlFetchStream utilizzando stream_wrapper_register().
  3. Utilizza fopen() anziché file_get_contents() con la configurazione che preferisci.
  4. Chiama stream_get_meta_data() ed estrai le informazioni dell'intestazione della risposta indicizzando i metadati per 'wrapper_data. Le intestazioni di risposta 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 offre un modo più mirato per utilizzare il 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 sostituisce tutte le richieste HTTP(S) effettuate dalle funzioni compatibili con l'wrapper dello stream per utilizzare il servizio di recupero dell'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 dello stream:

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 durante l'upgrade a PHP. Il comportamento, le funzionalità e le istruzioni di configurazione dell'API Users rimangono invariati. Per ulteriori dettagli, consulta la panoramica dell'API Users e la guida di riferimento dell'API Users.

Librerie con contributi della community

Puoi utilizzare l'API fornita dalla community per datastore durante l'upgrade a PHP.

Altre considerazioni

  • Per testare la funzionalità dei servizi pacchettizzati precedenti 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 file eseguibile PHP. Tieni presente che questo è diverso da PHP 5, che richiede un file eseguibile php-cgi.

    Se il progetto ha un file composer.json, imposta --php-composer-path su del file composer.phar.

  • Per eseguire il deployment dell'app, utilizza il comando gcloud app deploy.

  • Il logging nel runtime PHP segue lo standard di logging in Cloud Logging. Nel runtime PHP, i log delle app non sono più raggruppati con i log delle richieste, ma sono separati in record diversi. Per scoprire di più sulla lettura e sulla scrittura dei log, consulta la guida alla scrittura e alla visualizzazione dei log.

Esempi

Per vedere esempi di utilizzo dei servizi pacchettizzati precedenti con PHP, scarica gli esempi di codice.