Avviso: nei prossimi mesi stiamo riorganizzando il sito della documentazione di App Engine per semplificare la ricerca di contenuti e l'allineamento con il resto dei prodotti Google Cloud. Gli stessi contenuti saranno disponibili, ma la navigazione ora corrisponderà al resto dei prodotti Cloud.

PHP 8.1 è ora disponibile in anteprima.

Creare un'app con PHP 7 e versioni successive

ID regione

REGION_ID è un codice abbreviato assegnato da Google in base all'area geografica selezionata al momento della creazione dell'app. Il codice non corrisponde a un paese o a una provincia, anche se alcuni ID regione potrebbero apparire simili ai codici paese e provincia più utilizzati. Per le app create dopo febbraio 2020, REGION_ID.r è incluso negli URL App Engine. Per le app esistenti create prima di questa data, l'ID area geografica è facoltativo nell'URL.

Scopri di più sugli ID regione.

Scopri come creare un'app in App Engine utilizzando la versione 7.4 o 8.1 di PHP. L'app di esempio consente agli utenti di pubblicare su una pagina web titoli, autori, descrizioni, date di pubblicazione e immagini dei loro libri preferiti. L'app archivia i dati testuali in un database Cloud SQL e le immagini in un bucket Cloud Storage.

Struttura della guida

  1. Creazione di un progetto Google Cloud mediante l'interfaccia a riga di comando di Google Cloud

  2. Scaricare l'app di esempio

  3. Specificare le dipendenze con composer.json

  4. Inizializzare l'app e definire i controller frontali

  5. Integrazione con i servizi Google Cloud

  6. Configurazione dell'app per App Engine

  7. Deployment dell'app

Prima di iniziare

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Nella pagina del selettore dei progetti in Google Cloud Console, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.

  4. Attiva Cloud Build API.

    Abilita l'API

  5. Installa e inizializza l'interfaccia a riga di comando di Google Cloud.
  6. Nella pagina del selettore dei progetti in Google Cloud Console, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  7. Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.

  8. Attiva Cloud Build API.

    Abilita l'API

  9. Installa e inizializza l'interfaccia a riga di comando di Google Cloud.
  10. Installa Writer, lo strumento di gestione delle dipendenze PHP. Devi installare Composer a livello globale su sistemi Linux e Mac OS X.

Download dell'app di esempio

  1. Esplora il codice su GitHub

  2. Scarica o clona l'app.

    git clone https://github.com/GoogleCloudPlatform/php-docs-samples.git

    Oppure scarica l'esempio come file ZIP ed estrailo.

  3. Vai alla directory getting-started.

    cd appengine/standard/getting-started

Specifica delle dipendenze con composer.json

L'app usa un controller anteriore per instradare le richieste. Il codice campione in questa guida utilizza lo standard Slim Framework, ma puoi utilizzare un framework web a tua scelta.

  1. Apri il file composer.json per esaminare tutte le dipendenze dirette:

    {
      "require": {
        "google/cloud-storage": "^1.6",
        "slim/slim": "^4.0",
        "slim/psr7": "^1.0",
        "slim/twig-view": "^3.0",
        "php-di/slim-bridge": "^3.1",
        "symfony/yaml": "^5.2"
      },
      "autoload": {
         "psr-4": {
           "Google\\Cloud\\Samples\\AppEngine\\GettingStarted\\": "src"
         }
      }
    }
    
  2. Per installare le dipendenze e produrre un file composer.lock, esegui il comando seguente:

    composer install
    

    Il file composer.lock consente alla tua app di recuperare le stesse versioni dei pacchetti utilizzati da più build e ambienti.

Inizializzazione dell'app e definizione dei controller frontali

Il file index.php inizializza l'app e inoltra tutte le richieste ai controller definiti nel file ./src/controllers.php.


// Use the composer autoloader to load dependencies.
require_once __DIR__ . '/vendor/autoload.php';

//  Load the application code.
/** @var Slim\App $app */
$app = require __DIR__ . '/src/app.php';
require __DIR__ . '/src/controllers.php';

// Bootstrap the slim framework to handle the request.
$app->run();

Per ulteriori informazioni sulla gestione delle richieste, leggi informazioni sull'avvio di applicazioni e sulla gestione delle richieste.

Integrazione con i servizi Google Cloud

App Engine richiede l'integrazione delle app con sistemi esterni per l'archiviazione dei dati. L'app di esempio archivia i dati testuali su Cloud SQL e le immagini su Cloud Storage.

Consulta la pagina relativa alla scelta di opzioni di archiviazione per tutte le opzioni di archiviazione Google Cloud.

Utilizzo di Cloud SQL

Nell'app di esempio, gli utenti pubblicano libri in una pagina web. L'app utilizza un database Cloud SQL per archiviare titoli, autori, data di pubblicazione e descrizioni dei libri.

Dovrai creare un'istanza Cloud SQL prima di aggiungere contenuti al database dell'app.

Creazione di un'istanza Cloud SQL

Utilizza l'interfaccia a riga di comando gcloud per creare un'istanza Cloud SQL:

gcloud sql instances create INSTANCE_NAME --tier=MACHINE_TYPE --region=REGION

Ad esempio, se vuoi assegnare un nome all'istanza bookshelf e utilizzare il tipo di macchina db-n1-standard-2 nell'area geografica centrale degli Stati Uniti:

gcloud sql instances create bookshelf --tier=db-n1-standard-2 --region=us-central1

Configurazione dell'utente root MySQL

Puoi utilizzare l'interfaccia a riga di comando gcloud per impostare la password dell'utente root dell'istanza Cloud SQL:

gcloud sql users set-password USER --host=HOST --instance=INSTANCE_NAME --password=PASSWORD

Ad esempio, se vuoi impostare la password dell'utente root per l'istanza Cloud SQL bookshelf su passw0rd!:

gcloud sql users set-password root --host=% --instance=bookshelf --password=passw0rd!

Configurazione di un database nell'istanza Cloud SQL

Per archiviare gli autori, i titoli, la data di pubblicazione e le descrizioni dei libri, crea un database MySQL:

gcloud sql databases create DATABASE_NAME --instance=INSTANCE_NAME

Ad esempio, se vuoi creare un database denominato book-data sull'istanza Cloud SQL bookshelf:

gcloud sql databases create book-data --instance=bookshelf

Connessione al database Cloud SQL

L'app di esempio utilizza PDO di PHP per interagire con il database MySQL.

// Fill the variables below to match your Cloud SQL configuration.
// $dbConn = 'YOUR_CLOUDSQL_CONNECTION_NAME';
// $dbName = 'YOUR_CLOUDSQL_DATABASE_NAME';
// $dbUser = 'YOUR_CLOUDSQL_USER';
// $dbPass = 'YOUR_CLOUDSQL_PASSWORD';
$dsn = "mysql:unix_socket=/cloudsql/${dbConn};dbname=${dbName}";
$pdo = new PDO($dsn, $dbUser, $dbPass);

Per questo tutorial, tali parametri sono specificati come variabili di ambiente nella sezione Configurare l'app di seguito.

Esecuzione di query su una singola riga

Quando l'utente fa clic su un libro, l'app esegue una query sul database e restituisce una singola riga che include il titolo, l'autore, la data di pubblicazione e la descrizione del libro.

$statement = $pdo->prepare('SELECT * FROM books WHERE id = :id');
$statement->bindValue('id', $id, PDO::PARAM_INT);
$statement->execute();
$result = $statement->fetch(PDO::FETCH_ASSOC);

Utilizzo di Cloud Storage

L'app di esempio utilizza Cloud Storage per archiviare le immagini, che sono file binari, caricati dagli utenti.

Creazione di un bucket Cloud Storage

Cloud Storage utilizza i bucket per organizzare e controllare l'accesso ai dati.

Utilizza l'interfaccia a riga di comando gcloud per creare un bucket Cloud Storage:

gsutil mb -l BUCKET_REGION gs://BUCKET_NAME/

Ad esempio, se vuoi creare un bucket denominato picture-storage nell'area geografica us-central1:

gsutil mb -l us-central1 gs://picture-storage/
  • In caso di esito positivo, viene visualizzato il seguente output:

    Creating gs://BUCKET_NAME/
  • In caso contrario, potresti visualizzare il seguente output:

    ServiceException: 409 Bucket BUCKET_NAME already exists

    Riprova utilizzando un altro nome per il bucket.

Connessione di un progetto a un bucket Cloud Storage

Per utilizzare Cloud Storage, devi specificare la libreria Cloud Storage.

use Google\Cloud\Storage\StorageClient;

Archiviazione delle immagini

Ora che hai creato un bucket Cloud Storage e configurato una connessione, puoi archiviare le immagini. Le immagini possono essere caricate con elenchi di controllo di accesso (ACL) predefiniti per controllare l'accesso alle immagini.

In questa app di esempio, le immagini caricate avranno l'ACL predefinito public-read. È possibile accedere all'URL pubblico tramite la proprietà mediaLink dell'oggetto Cloud Storage. Puoi utilizzare questo URL in un tag immagine HTML.

// Set your own image file path and content type below to upload an
// image to Cloud Storage.
// $imageStream = fopen('/path/to/your_image.jpg', 'r');
// $imageContentType = 'image/jpg';
$object = $bucket->upload($imageStream, [
    'metadata' => ['contentType' => $imageContentType],
    'predefinedAcl' => 'publicRead',
]);
$imageUrl = $object->info()['mediaLink'];

Per istruzioni su come leggere un oggetto Cloud Storage privato, consulta la pagina di download degli oggetti.

Eliminazione delle immagini

Quando un utente elimina un libro dall'app, questo codice rimuove l'immagine dal bucket Cloud Storage.

$object = $bucket->object($objectName);
$object->delete();

Configurazione dell'applicazione

Puoi configurare le applicazioni da eseguire su App Engine utilizzando un file app.yaml, che specifica il runtime dell'applicazione, le variabili di ambiente e altre impostazioni.

Per un'app con requisiti di configurazione minimi, il file app.yaml può essere una singola riga:

PHP 8.1 (anteprima)

runtime: php81

PHP 7.4

runtime: php74

Puoi aggiungere ulteriori opzioni di configurazione e variabili di ambiente specifiche per le applicazioni al file di configurazione app.yaml.

Aggiunta di variabili di ambiente

Il file app.yaml è il punto in cui viene fornita la configurazione dell'ambiente all'app. L'esempio di Books utilizzato in questa guida necessita della configurazione come variabili di ambiente per stabilire come connettersi all'istanza Cloud SQL corretta e al bucket Cloud Storage.

Per eseguire il deployment dell'app, devi modificare il file di configurazione di app.yaml:

# See https://cloud.google.com/appengine/docs/standard/php/config/appref for a
# complete list of `app.yaml` directives.

runtime: php74

env_variables:
    GOOGLE_STORAGE_BUCKET: ""
    # populate these to use the "mysql" or "postres" backends
    CLOUDSQL_CONNECTION_NAME: ""
    CLOUDSQL_USER: ""
    CLOUDSQL_PASSWORD: ""
    ## Uncomment to give your database a name other than "bookshelf"
    # CLOUDSQL_DATABASE_NAME: ""
  1. Imposta la variabile GOOGLE_STORAGE_BUCKET sul nome del bucket Cloud Storage.

  2. Imposta la variabile CLOUDSQL_CONNECTION_NAME su app-name:region:instance-name Puoi recuperare i dettagli necessari utilizzando il seguente comando gcloud:

    gcloud sql instances describe INSTANCE

    Per un'istanza Cloud SQL di seconda generazione, CLOUDSQL_CONNECTION_NAME sarà nel seguente formato: your_project_name:your_region:your_instance

  3. Rimuovi il commento e imposta la variabile CLOUD_SQL_DATABASE_NAME se il database che hai creato ha un nome diverso da bookshelf. In questo esempio, il database è stato creato con il nome book-data.

  4. Esamina il file app.yaml, che dovrebbe essere simile a questo:

PHP 8.1 (anteprima)

runtime: php81

env_variables:
  GOOGLE_STORAGE_BUCKET: picture-storage
  CLOUDSQL_CONNECTION_NAME: sample-application:us-central1:bookshelf
  CLOUDSQL_USER: root
  CLOUDSQL_PASSWORD: passw0rd!
  CLOUDSQL_DATABASE_NAME: book-data

PHP 7.4

runtime: php74

env_variables:
  GOOGLE_STORAGE_BUCKET: picture-storage
  CLOUDSQL_CONNECTION_NAME: sample-application:us-central1:bookshelf
  CLOUDSQL_USER: root
  CLOUDSQL_PASSWORD: passw0rd!
  CLOUDSQL_DATABASE_NAME: book-data

Implementazione dell'applicazione

  1. Per il deployment dell'applicazione, vai alla directory getting-started ed esegui il comando seguente:

    gcloud app deploy
  2. Quando viene visualizzato il messaggio relativo alla posizione, scegli una posizione in prossimità degli utenti della tua app. App Engine funziona a livello di area geografica, il che significa che l'infrastruttura che esegue la tua app si trova in un'area geografica specifica. Ad esempio, questo tutorial ha utilizzato l'area geografica us-central1 per eseguire il deployment delle risorse di archiviazione. Esegui il deployment dell'app nella stessa area geografica per ridurre la latenza e migliorare le prestazioni.

    In generale, scegliere una località vicino agli utenti è una buona idea, ma in alcuni casi è consigliato eseguire il deployment della tua applicazione dove si trovano le relative risorse. Ulteriori informazioni sulle località di App Engine e sulle località delle risorse disponibili.

  3. Visualizza l'applicazione:

    gcloud app browse

Pulizia

Elimina il progetto Google Cloud per interrompere la fatturazione delle risorse utilizzate all'interno del progetto.

Per eliminare il progetto utilizzando il seguente comando:

gcloud projects delete PROJECT_ID

Per verificare che il progetto sia stato eliminato, elenca i progetti:

gcloud projects list

Passaggi successivi