Anwendung mit PHP 7/8 erstellen

Regions-ID

REGION_ID ist ein abgekürzter Code, den Google anhand der Region zuweist, die Sie beim Erstellen Ihrer Anwendung ausgewählt haben. Der Code bezieht sich nicht auf ein Land oder eine Provinz, auch wenn einige Regions-IDs häufig verwendeten Länder- und Provinzcodes ähneln können. Bei Anwendungen, die nach Februar 2020 erstellt wurden, ist REGION_ID.r in den App Engine-URLs enthalten. Bei Anwendungen, die vor diesem Datum erstellt wurden, ist die Regions-ID in der URL optional.

Hier finden Sie weitere Informationen zu Regions-IDs.

Hier erfahren Sie, wie Sie eine Anwendung in App Engine mit PHP 7.4 oder 8.1 erstellen. Mit der hier verwendeten Beispielanwendung können Nutzer Titel, Autoren, Beschreibungen, Erscheinungsdatum und Bilder ihrer Lieblingsbücher auf einer Webseite veröffentlichen. Die Anwendung speichert die Textdaten in einer Cloud SQL-Datenbank und die Bilder in einem Cloud Storage-Bucket.

Inhaltsverzeichnis

  1. Google Cloud-Projekt mit der Google Cloud CLI erstellen

  2. Beispielanwendung herunterladen

  3. Abhängigkeiten mit composer.json angeben

  4. Anwendung initialisieren und Front-Controller definieren

  5. In Google Cloud-Dienste einbinden

  6. Anwendung für App Engine konfigurieren

  7. Anwendung bereitstellen

Hinweise

  1. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  4. Cloud Build API aktivieren.

    Aktivieren Sie die API

  5. Installieren Sie die Google Cloud CLI.
  6. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  7. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  8. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  9. Cloud Build API aktivieren.

    Aktivieren Sie die API

  10. Installieren Sie die Google Cloud CLI.
  11. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  12. Installieren Sie Composer, das PHP-Tool zur Abhängigkeitsverwaltung. Sie müssen Composer global auf Linux- und Mac OS X-Systemen installieren.

Beispielanwendung herunterladen

  1. Untersuchen Sie den Code in GitHub.

  2. Laden Sie die Anwendung herunter oder klonen Sie sie.

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

    Alternativ können Sie auch das Beispiel als Zip-Datei herunterladen und diese dann extrahieren.

  3. Rufen Sie das Verzeichnis getting-started auf.

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

Abhängigkeiten mit composer.json angeben

Die Anwendung verwendet einen Front-Controller zur Weiterleitung von Anfragen. Der Beispielcode in diesem Leitfaden verwendet zur Verarbeitung von HTTP-Anfragen das Slim-Framework. Sie können jedoch auch ein Web-Framework Ihrer Wahl einsetzen.

  1. Öffnen Sie die Datei composer.json, um alle direkten Abhängigkeiten zu prüfen:

    {
      "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. Führen Sie den folgenden Befehl aus, um die Abhängigkeiten zu installieren und eine composer.lock-Datei zu erstellen:

    composer install
    

    Die Datei composer.lock unterstützt Ihre Anwendung dabei, dieselben Versionen der Pakete abzurufen, die Sie in mehreren Builds und Umgebungen verwenden.

Anwendung initialisieren und Front-Controller definieren

Die Datei index.php initialisiert die Anwendung und leitet alle Anfragen an die in der ./src/controllers.php -Datei definierten Controller weiter.


// 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();

Weitere Informationen zur Verarbeitung von Anfragen finden Sie unter Anwendungsstart und Anfrageverarbeitung.

In Google Cloud-Dienste einbinden

App Engine erfordert die Einbindung von Anwendungen in externe Systeme zur Datenspeicherung. Die Beispielanwendung speichert Textdaten in Cloud SQL und Bilder in Cloud Storage.

Weitere Informationen zu allen Google Cloud-Speicheroptionen finden Sie auf der Seite "Speicheroption auswählen".

Cloud SQL verwenden

In der Beispielanwendung veröffentlichen Nutzer Bücher auf einer Webseite. Die Anwendung verwendet eine Cloud SQL-Datenbank, um Titel, Autoren, Erscheinungsdatum und Beschreibungen der Bücher zu speichern.

Sie müssen eine Cloud SQL-Instanz erstellen, um Inhalte zur Datenbank der Anwendung hinzuzufügen.

Cloud SQL-Instanz erstellen

Verwenden Sie die gcloud CLI, um eine Cloud SQL-Instanz zu erstellen:

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

Wenn Sie Ihre Instanz beispielsweise bookshelf nennen und den Maschinentyp db-n1-standard-2 in der zentralen Region der USA verwenden möchten:

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

MySQL-Root-Nutzer einrichten

Sie können die gcloud CLI verwenden, um das Passwort des Root-Nutzers Ihrer Cloud SQL-Instanz festzulegen:

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

Wenn Sie beispielsweise das Passwort des Root-Nutzers für die Cloud SQL-Instanz bookshelf auf passw0rd! setzen möchten:

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

Datenbank auf der Cloud SQL-Instanz einrichten

So erstellen Sie eine MySQL-Datenbank, um Autoren, Titel, Erscheinungsdatum und Beschreibungen der Bücher zu speichern:

gcloud sql databases create DATABASE_NAME --instance=INSTANCE_NAME

Wenn Sie beispielsweise eine Datenbank namens book-data auf der Cloud SQL-Instanz bookshelf erstellen möchten:

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

Verbindung zur Cloud SQL-Datenbank herstellen

Die Beispielanwendung verwendet PDO von PHP, um mit der MySQL-Datenbank zu interagieren.

// 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);

In diesem Leitfaden werden diese Parameter unter Anwendung konfigurieren als Umgebungsvariablen angegeben.

Einzelne Zeile abfragen

Klickt ein Nutzer auf ein Buch, fragt die Anwendung die Datenbank ab und gibt eine einzelne Zeile mit dem Titel, dem Autor, dem Erscheinungsdatum und der Beschreibung des Buchs zurück.

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

Cloud Storage verwenden

Die Beispielanwendung nutzt Cloud Storage, um die Bilder zu speichern. Hierbei handelt es sich um Binärdateien, die von Nutzern hochgeladen werden.

Cloud Storage-Bucket erstellen

Cloud Storage verwendet Buckets, um den Zugriff auf Daten zu organisieren und zu steuern.

Verwenden Sie die gcloud CLI, um einen Cloud Storage-Bucket zu erstellen:

gsutil mb -l BUCKET_REGION gs://BUCKET_NAME/

Wenn Sie beispielsweise einen Bucket namens picture-storage in der Region us-central1 erstellen möchten, müssen Sie so vorgehen:

gsutil mb -l us-central1 gs://picture-storage/
  • War die Erstellung erfolgreich, wird Folgendes ausgegeben:

    Creating gs://BUCKET_NAME/
  • Wenn nicht, ist folgende Ausgabe möglich:

    ServiceException: 409 Bucket BUCKET_NAME already exists

    Versuchen Sie es noch einmal mit einem anderen Bucket-Namen.

Projekt mit Cloud Storage-Bucket verbinden

Zur Verwendung von Cloud Storage müssen Sie die Cloud Storage-Bibliothek angeben.

use Google\Cloud\Storage\StorageClient;

Bilder speichern

Nachdem Sie einen Cloud Storage-Bucket erstellt und eine Verbindung hergestellt haben, können Sie Bilder speichern. Bilder können mit vordefinierten Access Control Lists (ACL) hochgeladen werden, um den Zugriff auf die Bilder zu steuern.

In der Beispielanwendung wird für hochgeladene Bilder die vordefinierte ACL public-read verwendet. Die öffentliche URL kann über die Eigenschaft mediaLink Ihres Cloud Storage-Objekts aufgerufen werden. Sie können diese URL in einem HTML-Bild-Tag verwenden.

// 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'];

Eine Anleitung zum Lesen eines privaten Cloud Storage-Objekts finden Sie auf der Seite Objekte herunterladen.

Images löschen

Löscht ein Nutzer ein Buch aus der Anwendung, wird das Bild aus dem Cloud Storage-Bucket durch folgenden Code entfernt.

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

App konfigurieren

Die Konfiguration von Anwendungen für die Ausführung in App Engine erfolgt mithilfe der Datei app.yaml. Diese enthält Angaben zur Laufzeit, die Umgebungsvariablen und andere Einstellungen der Anwendung.

Bei einer Anwendung mit minimalen Konfigurationsanforderungen kann die Datei app.yaml aus einer einzelnen Zeile bestehen:

PHP 8.1

runtime: php81

PHP 7.4

runtime: php74

Sie können der Konfigurationsdatei app.yaml weitere Konfigurationsoptionen und anwendungsspezifische Umgebungsvariablen hinzufügen.

Umgebungsvariablen hinzufügen

In der Datei app.yaml wird die Umgebungskonfiguration für die App bereitgestellt. Das in diesem Handbuch verwendete Bookshelf-Beispiel benötigt eine Konfiguration, die als Umgebungsvariablen bereitgestellt wird, um zu wissen, wie eine Verbindung zur richtigen Cloud SQL-Instanz und zum Cloud Storage-Bucket hergestellt wird.

Zum Bereitstellen der Anwendung müssen Sie die Konfigurationsdatei app.yaml bearbeiten:

# 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. Legen Sie die Variable GOOGLE_STORAGE_BUCKET auf den Namen des Cloud Storage-Buckets fest.

  2. Legen Sie die Variable CLOUDSQL_CONNECTION_NAME auf app-name:region:instance-name fest. Sie können die benötigten Details mit dem folgenden gcloud-Befehl abrufen:

    gcloud sql instances describe INSTANCE

    Bei einer Cloud SQL-Instanz der zweiten Generation hat CLOUDSQL_CONNECTION_NAME das folgende Format: your_project_name:your_region:your_instance

  3. Entfernen Sie das Kommentarzeichen und legen Sie die Variable CLOUD_SQL_DATABASE_NAME fest, wenn die von Ihnen erstellte Datenbank einen anderen Namen als bookshelf hat. In diesem Beispiel wurde die Datenbank mit dem Namen book-data erstellt.

  4. Prüfen Sie Ihre app.yaml-Datei, die in etwa so aussehen sollte:

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

Anwendung bereitstellen

  1. Gehen Sie zum Bereitstellen der Anwendung zum Verzeichnis getting-started und führen Sie den folgenden Befehl aus:

    gcloud app deploy
  2. Wenn Sie aufgefordert werden, einen Standort einzugeben, wählen Sie einen in der Nähe der Anwendungsnutzer aus. App Engine ist regional. Das bedeutet, dass sich die Infrastruktur, in der die Anwendung ausgeführt wird, in einer bestimmten geografischen Region befindet. In diesem Leitfaden wurde beispielsweise die Region us-central1 verwendet, um die zugehörigen Speicherressourcen bereitzustellen. Stellen Sie die Anwendung in der gleichen Region bereit, um die Latenz zu verringern und die Leistung zu verbessern.

    Ein Standort in der Nähe Ihrer Nutzer ist in der Regel eine gute Wahl. In einigen Fällen kann es jedoch von Vorteil sein, die Anwendung in der Nähe ihrer Ressourcen bereitzustellen. Informationen hierzu finden Sie unter App Engine-Standorte und Ressourcenstandorte.

  3. Rufen Sie die Anwendung auf:

    gcloud app browse

Bereinigen

Löschen Sie Ihr Google Cloud-Projekt, um die Abrechnung für die im Projekt verwendeten Ressourcen zu beenden.

Löschen Sie das Projekt mit folgendem Befehl:

gcloud projects delete PROJECT_ID

Prüfen Sie dann, ob das Projekt gelöscht wurde. Listen Sie dafür Ihre Projekte folgendermaßen auf:

gcloud projects list

Weitere Informationen