Créer une application avec PHP

ID de la région

Le REGION_ID est un code abrégé que Google attribue en fonction de la région que vous sélectionnez lors de la création de votre application. Le code ne correspond pas à un pays ou une province, même si certains ID de région peuvent ressembler aux codes de pays et de province couramment utilisés. Pour les applications créées après février 2020, REGION_ID.r est inclus dans les URL App Engine. Pour les applications existantes créées avant cette date, l'ID de région est facultatif dans l'URL.

En savoir plus sur les ID de région

Découvrez comment créer une application dans App Engine à l'aide de la version 7.4 ou 8.1 de PHP. L'exemple d'application permet aux utilisateurs de publier sur une page Web les titres, les auteurs, les descriptions, la date de publication ainsi que des images de leurs livres préférés. L'application stocke les données de texte dans une base de données Cloud SQL et les images dans un bucket Cloud Storage.

Structure du guide

  1. Créer un projet Google Cloud à l'aide de Google Cloud CLI

  2. Téléchargez l'exemple d'application

  3. Spécifier des dépendances avec composer.json

  4. Initialiser l'application et définir des contrôleurs frontaux

  5. S'intégrer aux services Google Cloud

  6. Configurer l'application pour App Engine

  7. Déployer l'application

Avant de commencer

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Build API.

    Enable the 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. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the Cloud Build API.

    Enable the API

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

    gcloud init
  12. Installez Composer, l'outil de gestion des dépendances PHP. Vous devez installer Composer de manière globale sur les systèmes Linux et Mac OS X.

Téléchargez l'exemple d'application

  1. Explorez le code sur GitHub.

  2. Téléchargez ou clonez l'application.

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

    Ou téléchargez l'exemple sous forme de fichier zip, puis extrayez-le.

  3. Accédez au répertoire getting-started :

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

Spécifier des dépendances avec composer.json

L'application achemine les requêtes à l'aide d'un contrôleur frontal. L'exemple de code présenté dans ce guide utilise le framework Slim, mais vous êtes libre d'utiliser le framework Web de votre choix.

  1. Ouvrez le fichier composer.json pour examiner toutes les dépendances directes :

    {
      "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. Pour installer vos dépendances et générer un fichier composer.lock, exécutez la commande suivante :

    composer install
    

    Le fichier composer.lock permet à votre application de récupérer les mêmes versions des packages que celle que vous utilisez dans plusieurs builds et environnements.

Initialiser l'application et définir des contrôleurs frontaux

Le fichier index.php initialise l'application et transmet toutes les requêtes aux contrôleurs définis dans le fichier ./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();

Pour en savoir plus sur la gestion des requêtes, consultez les sections Démarrage de l'application et Traiter des requêtes.

Intégrer les services Google Cloud

App Engine requiert que les applications intègrent des systèmes externes de stockage de données. L'exemple d'application stocke les données textuelles sur Cloud SQL et les images sur Cloud Storage.

Pour en savoir plus sur toutes les options de stockage de Google Cloud, consultez la page Choisir une option de stockage.

Utiliser Cloud SQL

Dans cet exemple d'application, les utilisateurs publient des informations relatives à des livres sur une page Web. L'application stocke les titres, les auteurs, la date de publication et les descriptions des livres à l'aide d'une base de données Cloud SQL.

Vous devrez créer une instance Cloud SQL pour pouvoir ajouter du contenu à la base de données de l'application.

Créer une instance Cloud SQL

Utilisez gcloud CLI pour créer une instance Cloud SQL :

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

Par exemple, si vous souhaitez nommer votre instance bookshelf et utiliser le type de machine db-n1-standard-2 dans la région centrale des États-Unis :

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

Configurer l'utilisateur racine MySQL

Vous pouvez utiliser gcloud CLI pour définir le mot de passe de l'utilisateur racine de votre instance Cloud SQL :

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

Par exemple, si vous souhaitez définir le mot de passe de l'utilisateur racine pour l'instance Cloud SQL bookshelf sur passw0rd! :

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

Configurer une base de données sur l'instance Cloud SQL

Pour stocker les auteurs, les titres, la date de publication et les descriptions des livres, créez une base de données MySQL :

gcloud sql databases create DATABASE_NAME --instance=INSTANCE_NAME

Par exemple, si vous souhaitez créer une base de données appelée book-data sur l'instance Cloud SQL bookshelf :

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

Se connecter à la base de données Cloud SQL

L'exemple d'application utilise l'extension PDO de PHP pour interagir avec la base de données 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);

Dans ce tutoriel, ces paramètres sont spécifiés en tant que variables d'environnement dans la section Configurer l'application ci-dessous.

Envoyer une requête correspondant à une seule ligne

Lorsque l'utilisateur clique sur un livre, l'application interroge la base de données et renvoie une seule ligne comprenant le titre, l'auteur, la date de publication et la description de ce livre.

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

Utiliser Cloud Storage

L'exemple d'application fait appel à Cloud Storage pour stocker les images, qui sont des fichiers binaires, importées par les utilisateurs.

Créer un bucket Cloud Storage

Cloud Storage se sert de buckets pour organiser vos données et en contrôler l'accès.

Utilisez gcloud CLI pour créer un bucket Cloud Storage :

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

Par exemple, si vous souhaitez créer un bucket appelé picture-storage dans la région us-central1 :

gcloud storage buckets create gs://picture-storage/ --location=us-central1
  • Si l'opération réussit, vous obtenez le résultat suivant :

    Creating gs://BUCKET_NAME/
  • En cas d'échec, le résultat suivant peut s'afficher :

    ServiceException: 409 Bucket BUCKET_NAME already exists

    Réessayez en donnant un autre nom au bucket.

Associer un projet à un bucket Cloud Storage

Pour utiliser Cloud Storage, vous devez spécifier la bibliothèque Cloud Storage.

use Google\Cloud\Storage\StorageClient;

Stocker les images

Maintenant que vous avez créé un bucket Cloud Storage et configuré une connexion, vous pouvez stocker des images. Vous pouvez en importer à l'aide des listes de contrôle d'accès prédéfinies (LCA) afin d'en contrôler l'accès.

Dans cet exemple d'application, les images importées sont associées à la LCA public-read prédéfinie. L'URL publique est accessible via la propriété mediaLink de votre objet Cloud Storage. Vous pouvez utiliser cette URL dans une balise d'image 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'];

Si vous souhaitez connaître la procédure à suivre pour lire un objet Cloud Storage privé, consultez la page Télécharger des objets.

Supprimer des images

Lorsqu'un utilisateur supprime un livre de l'application, le code suivant supprime l'image du bucket Cloud Storage.

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

Configurer l'application

Pour configurer les applications afin qu'elles s'exécutent sur App Engine, vous devez utiliser un fichier app.yaml. Celui-ci spécifie l'environnement d'exécution, les variables d'environnement ainsi que d'autres paramètres de l'application.

Le fichier app.yaml d'une application dont la configuration est minimale peut comporter une seule ligne :

PHP 8.1

runtime: php81

PHP 7.4

runtime: php74

Vous pouvez ajouter davantage d'options de configuration et de variables d'environnement spécifiques à l'application dans le fichier de configuration app.yaml.

Ajouter des variables d'environnement

Le fichier app.yaml est l'endroit où la configuration de l'environnement est fournie à l'application. L'exemple "bookshelf" utilisé dans ce guide requiert une configuration fournie en tant que variables d'environnement pour savoir comment se connecter à l'instance Cloud SQL et au bucket Cloud Storage appropriés.

Pour déployer votre application, vous devez modifier le fichier de configuration 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. Définissez la variable GOOGLE_STORAGE_BUCKET sur le nom du bucket Cloud Storage.

  2. Définissez la variable CLOUDSQL_CONNECTION_NAME sur app-name:region:instance-name. Vous pouvez récupérer les informations nécessaires à l'aide de la commande gcloud suivante :

    gcloud sql instances describe INSTANCE

    Pour une instance Cloud SQL de deuxième génération, la variable CLOUDSQL_CONNECTION_NAME sera au format suivant : your_project_name:your_region:your_instance

  3. Annulez la mise en commentaire, puis définissez la variable CLOUD_SQL_DATABASE_NAME si la base de données que vous avez créée a un nom différent de bookshelf. Dans cet exemple, la base de données a été créée avec le nom book-data.

  4. Examinez votre fichier app.yaml, qui doit ressembler à ceci :

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

Déployer l'application

  1. Pour déployer l'application, accédez au répertoire getting-started et exécutez la commande suivante :

    gcloud app deploy
  2. Lorsque l'invite d'emplacement s'affiche, choisissez un emplacement situé à proximité des utilisateurs de votre application. App Engine est régional, ce qui signifie que l'infrastructure qui exécute votre application est située dans une zone géographique spécifique. Par exemple, ce tutoriel déploie les ressources de stockage dans la région us-central1. Déployez l'application dans la même région pour réduire la latence et améliorer les performances.

    En général, il est recommandé de choisir un emplacement proche de vos utilisateurs. Dans d'autres cas, en revanche, il peut être recommandé de déployer votre application à proximité de l'emplacement de ses ressources. Consultez les listes des emplacements disponibles pour App Engine et des emplacements disponibles pour les ressources.

  3. Affichez l'application :

    gcloud app browse

Nettoyer

Supprimez votre projet Google Cloud pour interrompre la facturation des ressources utilisées dans le projet.

Pour supprimer votre projet, exécutez la commande suivante :

gcloud projects delete PROJECT_ID

Pour vérifier que le projet a bien été supprimé, répertoriez l'ensemble de vos projets :

gcloud projects list

Étapes suivantes