Creazione di un'app con PHP

ID regione

REGION_ID è un codice abbreviato assegnato da Google in base alla regione selezionata al momento della creazione dell'app. Il codice non corrispondono a un paese o a una provincia, anche se potrebbero essere visualizzati alcuni ID regione in modo simile ai codici paese e provincia di uso comune. Per le app create dopo il giorno Febbraio 2020, REGION_ID.r è incluso in URL di App Engine. Per le app esistenti create prima di questa data, l'ID regione è facoltativo nell'URL.

Scopri di più sugli ID regione.

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

Struttura della guida

  1. Creazione di un progetto Google Cloud utilizzando Google Cloud CLI

  2. Download dell'app di esempio

  3. Specifica delle dipendenze con Composer.json

  4. Inizializzare l'app e definire i front controller

  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. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  4. Attiva Cloud Build API.

    Abilita l'API

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  9. Attiva Cloud Build API.

    Abilita l'API

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. Installa Composer. lo strumento di gestione delle dipendenze in 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

    In alternativa, scarica l'anteprima come file ZIP ed estrarlo.

  3. Vai alla directory getting-started.

    cd php-docs-samples/appengine/standard/getting-started

Specifica delle dipendenze con Composer.json

L'app utilizza un front controller per instradare le richieste. Il codice campione in questa guida utilizza il framework sottile, ma sei libero di usare il framework web che preferisci.

  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 comando:

    composer install
    

    Il file composer.lock consente alla tua app di recuperare le stesse versioni dell' e i pacchetti che utilizzi in più build e ambienti.

Inizializzazione dell'app e definizione dei front controller

Il file index.php inizializza l'app e inoltra tutte le richieste ai controller definita 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 saperne di più sulla gestione delle richieste, leggi l'articolo sull'avvio dell'applicazione e 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 dati di testo su Cloud SQL e immagini su Cloud Storage.

Consulta la pagina Scelta di un'opzione di archiviazione per tutte le opzioni di archiviazione di Google Cloud.

Utilizzo di Cloud SQL

Nell'app di esempio, gli utenti pubblicano i libri su una pagina web. L'app utilizza un linguaggio Cloud SQL in cui archiviare titoli, autori, data di pubblicazione e descrizioni libri.

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

Creazione di un'istanza Cloud SQL

Utilizza gcloud CLI per creare un'istanza Cloud SQL:

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

Ad esempio, se vuoi assegnare alla tua istanza il nome bookshelf e utilizzare la macchina tipo di db-n1-standard-2 nella regione centrale degli Stati Uniti:

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

Configurazione dell'utente root MySQL

Puoi utilizzare gcloud CLI per impostare la password dell'utente root della tua 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'account Cloud SQL dall'istanza bookshelf a passw0rd!:

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

Configurazione di un database sull'istanza Cloud SQL

Per archiviare autori, titoli, data di pubblicazione e 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 di 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, questi parametri sono specificati come variabili di ambiente di seguito in Configurazione dell'app.

Esecuzione di query su una singola riga

Quando l'utente fa clic su un libro, l'app interroga il database e restituisce un singolo riga che include titolo, autore, data di pubblicazione e 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, ovvero 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 gcloud CLI per creare un bucket Cloud Storage:

gcloud storage buckets create gs://BUCKET_NAME/ --location=BUCKET_REGION

Ad esempio, se vuoi creare un bucket denominato picture-storage nella Regione us-central1:

gcloud storage buckets create gs://picture-storage/ --location=us-central1
  • Se l'operazione ha esito positivo, verrà visualizzato il seguente output:

    Creating gs://BUCKET_NAME/
  • In caso contrario, potrebbe essere visualizzato 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 Libreria Cloud Storage.

use Google\Cloud\Storage\StorageClient;

Archiviazione delle immagini

Ora che hai creato un bucket Cloud Storage e configurato una connessione, possono archiviare immagini. Le immagini possono essere caricate elenchi di controllo dell'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 mediaLink dell'oggetto Cloud Storage. Puoi utilizzare la modalità 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 file di Cloud Storage privato consulta la pagina Download di oggetti.

Eliminazione delle immagini

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

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

Configurazione dell'applicazione

Puoi configurare le applicazioni per l'esecuzione 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 un riga singola:

PHP 8.1

runtime: php81

PHP 7.4

runtime: php74

Puoi aggiungere ulteriori opzioni di configurazione e un ambiente specifico per l'applicazione. nel file di configurazione app.yaml.

Aggiunta di variabili di ambiente

Il file app.yaml è il luogo in cui la configurazione dell'ambiente viene fornita all'app. Per l'esempio di scaffale utilizzato in questa guida è necessario fornire una configurazione come variabili di ambiente per sapere come connetterti dell'istanza e il bucket Cloud Storage.

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

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

runtime: php81

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 tuo Cloud Storage di sincronizzare la directory di una VM con un bucket.

  2. Imposta la variabile CLOUDSQL_CONNECTION_NAME su app-name:region:instance-name Puoi recuperare i dettagli necessari utilizzando il seguente 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 hanno creato ha un nome diverso da bookshelf. In questo esempio, Te Database è stata creata con il nome book-data.

  4. Controlla il file app.yaml, che dovrebbe avere il seguente aspetto:

PHP 8.1

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 eseguire il deployment dell'applicazione, vai alla directory getting-started e esegui questo comando:

    gcloud app deploy
  2. Quando viene visualizzata la richiesta di posizione, scegli una posizione vicino agli utenti dell'app. App Engine è regionale, il che significa che l'infrastruttura che esegue si trova in una specifica area geografica. Ad esempio, questo tutorial ha ha utilizzato la regione us-central1 per eseguire il deployment delle relative risorse di archiviazione. Esegui il deployment dell'app nella stessa regione per ridurre la latenza e migliorare le prestazioni.

    In generale, la scelta di una posizione vicina agli utenti è una buona idea, ma si verificano casi quando si esegue il deployment di un'applicazione vicino al punto in cui si trovano le sue risorse è consigliabile. Leggi le informazioni sulla disponibilità Località di App Engine e le località delle risorse.

  3. Visualizza l'applicazione:

    gcloud app browse

esegui la pulizia

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

Per eliminare il progetto utilizzando il comando seguente:

gcloud projects delete PROJECT_ID

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

gcloud projects list

Passaggi successivi