Die PHP-Laufzeit ist das Softwarepaket, das für die Installation des Codes Ihres Webdienstes und der Abhängigkeiten sowie für die Ausführung Ihres Dienstes verantwortlich ist.
Zur Angabe von PHP für die App Engine-Standardumgebung deklarieren Sie die Laufzeit in der Datei app.yaml
. Beispiele:
runtime: phpVERSION
Dabei ist VERSION die PHP-Versionsnummern MAJOR
und MINOR
. Wenn Sie beispielsweise die aktuelle PHP-Version (PHP 8.3) verwenden möchten, geben Sie 83
an.
Informationen zu anderen unterstützten PHP-Versionen und zur entsprechenden Ubuntu-Version für Ihre PHP-Version finden Sie im Zeitplan für den Laufzeitsupport. Beispiel: .
PHP-Version
Die PHP-Laufzeit verwendet den neuesten stabilen Release der Version, die in der Datei app.yaml
angegeben ist. App Engine wird automatisch auf neue Patchrelease-Versionen aktualisiert. Die Nebenversion wird jedoch nicht automatisch aktualisiert.
Beispiel: Eine mit PHP 7.3.0 bereitgestellte Anwendung wird später automatisch auf Version 7.3.1 aktualisiert, aber nicht auf PHP 7.4.0.
Appstart
Zur Verarbeitung von sämtlichem Anfragerouting muss ein Front-Controller bereitgestellt werden.
Die folgenden Beispiele zeigen verschiedene Möglichkeiten, wie Sie Ihre Anwendung bereitstellen können:
Wenn Ihre Anwendung eine
public/index.php
- oderindex.php
-Datei enthält, verwendet App Engine diese Datei zur Bereitstellung Ihrer Anwendung.Wir empfehlen einen Framework wie Laravel, Symfony oder Slim zu verwenden, da sie einfache Routings bieten, um PHP-Anwendungen schnell zu schreiben und bereitzustellen. Unter Front-Controller mit Slim finden Sie ein Beispiel.
Wenn Sie jedoch eine Legacy-Anwendung migrieren, sehen Sie sich die folgende Beispieldatei
index.php
an, um die benötigten PHP-Dateien zu importieren und den Front-Controller manuell zu implementieren:Wenn Sie das optionale Feld
entrypoint
in Ihrerapp.yaml
-Datei verwenden, verwendet App Engine den Befehl imentrypoint
-Element, um Ihre App bereitzustellen, und nichtpublic/index.php
oderindex.php
:entrypoint: serve path/to/my/front/controller.php
Das Feld
entrypoint
verwendet den integrierten Befehlserve
. Dieser ist ein Programm innerhalb der PHP-Laufzeit, das diephp-fpm
-Implementierung und einen Webserver im Hintergrund startet. Der Webserver leitet den gesamten Traffic mithilfe des Designmusters des Front-Controllers an die bereitgestellte PHP-Datei weiter.Der Befehl
serve
serve hat zwei optionale Flags:--workers=N
: Gibt die Anzahl N derphp-fpm
-Worker an. Wenn Sie das Flag--workers
nicht festlegen, wird die Anzahl der Worker vom Befehlserve
anhand der verfügbaren Speichermenge geschätzt. Die besten Ergebnisse erzielen Sie, wenn Sie für die Werte des Flags--workers
im Befehlserve
und im Elementmax_concurrent_requests
die gleiche Zahl festlegen.--enable-dynamic-workers
: Gibt an, dass diephp-fpm
-Worker nur bei Bedarf erzeugt werden sollen. Standardmäßig wird für diephp-fpm
-Worker eine statische Richtlinie verwendet. Mit dem Flag--workers=N
können Sie die maximale Anzahl von erstellten Workern ändern. Standardmäßig entspricht die maximale Anzahl von erstellten Workern der in der statischen Richtlinie festgelegten Anzahl.
Die optionalen Flags müssen vor dem Pfad des Front-Controllers stehen:
entrypoint: serve --workers=2 --enable-dynamic-workers path/to/index.php
Wenn Sie einen lang andauernden Worker-Prozess bereitstellen möchten, geben Sie bei dem Element
entrypoint
den Dateipfad des Worker-Prozesses an:entrypoint: php long-running-worker-file.php
Verwenden Sie nicht den Befehl
serve
, wenn von dem Elemententrypoint
ein Skript mit lang andauerndem Prozess wie ein Pub/Sub-Worker mit abonniertem Thema ausgeführt wird.
Weitere Informationen finden Sie in der app.yaml
-Referenz.
Aktivierte Erweiterungen
Die folgenden Erweiterungen wurden in der PHP-Laufzeit für App Engine aktiviert:
BCMath
bz2
Calendar
core
cgi
ctype
cURL
date
dba
dom
enchant
Exif
fcgi
fileinfo
filter
FTP
GD
gettext
GMP
hash
iconv
intl
json
LDAP
libxml
mbstring
MYSQLi
mysqlnd
MySQL (PDO)
OPcache
OpenSSL
PCNTL
pcre
PDO
pgsql
Phar
posix
PostgreSQL (PDO)
Reflection
session
Shmop
SimpleXML
SOAP
Sockets
sodium (PHP 8.x only, not available for PHP 7.x)
SPL
SQLite (PDO)
SQLite3
standard
test
tidy
tokenizer
XML
XMLreader
XMLrpc (PHP 7.x only, not available for PHP 8.x)
XMLwriter
XSL
zend
Zip
Zlib
Dynamisch ladbare Erweiterungen
Die folgenden Erweiterungen können durch entsprechende Konfiguration von php.ini
dynamisch geladen werden:
Fügen Sie zum Aktivieren dieser Erweiterungen in der Datei php.ini
unter extension
Anweisungen hinzu. Zum Beispiel:
extension=memcached.so
extension=grpc.so
extension=protobuf.so
extension=mongodb.so
extension=imagick.so
extension=opencensus.so
extension=redis.so
[opentelemetry]
extension=opentelemetry.so
Umgebungsvariablen
Folgende Umgebungsvariablen werden durch die Laufzeit festgelegt:
Umgebungsvariable | Beschreibung |
---|---|
GAE_APPLICATION
|
ID der App Engine-Anwendung. Diese ID hat das Präfix „region code~”, z. B. „e~” für Anwendungen, die in Europa bereitgestellt werden. |
GAE_DEPLOYMENT_ID |
ID der aktuellen Bereitstellung. |
GAE_ENV |
App Engine-Umgebung. Legen Sie standard fest. |
GAE_INSTANCE |
ID der Instanz, auf der Ihr Dienst gerade ausgeführt wird. |
GAE_MEMORY_MB |
Größe des für den Anwendungsprozess verfügbaren Speichers in MB |
GAE_RUNTIME |
Laufzeit, die in der Datei app.yaml angegeben ist. |
GAE_SERVICE |
Dienstname, der in der Datei app.yaml angegeben ist. Wenn kein Dienstname angegeben ist, wird als Wert default festgelegt. |
GAE_VERSION |
Aktuelle Versionsbezeichnung Ihres Dienstes. |
GOOGLE_CLOUD_PROJECT |
Google Cloud-Projekt-ID, die der Anwendung zugeordnet ist. |
PORT |
Port, der HTTP-Anfragen empfängt. |
NODE_ENV (nur in der Node.js-Laufzeit verfügbar) |
Erhält den Wert production , wenn der Dienst bereitgestellt wird. |
Sie können in der Datei app.yaml
weitere Umgebungsvariablen definieren. Die oben angegebenen Werte können aber mit Ausnahme von NODE_ENV
nicht überschrieben werden.
HTTPS und Weiterleitungsproxys
App Engine terminiert HTTPS-Verbindungen am Load-Balancer und leitet Anfragen an die Anwendung weiter. Einige Anwendungen müssen die ursprüngliche Anfrage-IP-Adresse und das Protokoll bestimmen. Die IP-Adresse des Nutzers ist im Standardheader X-Forwarded-For
verfügbar. Bei Anwendungen, die diese Informationen benötigen, sollte das Web-Framework so konfiguriert werden, dass dem Proxy vertraut wird.
Dateisystem
Die Laufzeit enthält das beschreibbare Verzeichnis /tmp
. Alle anderen Verzeichnisse sind schreibgeschützt. Beim Schreiben in /tmp
wird Systemspeicher belegt. Weitere Informationen finden Sie unter tempnam()
- und sys_get_temp_dir()
-Support.
Metadatenserver
Jede Instanz einer Anwendung kann mit dem App Engine-Metadatenserver Informationen über die Instanz und das Projekt abfragen.
Sie können auf den Metadatenserver über die folgenden Endpunkte zugreifen:
http://metadata
http://metadata.google.internal
An den Metadatenserver gesendete Anfragen müssen den Anfrageheader Metadata-Flavor: Google
enthalten. Dieser Header gibt an, dass die Anfrage zum Abrufen von Metadatenwerten gesendet wurde.
In der folgenden Tabelle sind die Endpunkte aufgeführt, an die Sie HTTP-Anfragen für bestimmte Metadaten senden können:
Metadatenendpunkt | Beschreibung |
---|---|
/computeMetadata/v1/project/numeric-project-id |
Projektnummer, die Ihrem Projekt zugewiesen ist. |
/computeMetadata/v1/project/project-id |
Projekt-ID, die Ihrem Projekt zugewiesen ist. |
/computeMetadata/v1/instance/region |
Region, in der die Instanz ausgeführt wird. |
/computeMetadata/v1/instance/service-accounts/default/aliases |
|
/computeMetadata/v1/instance/service-accounts/default/email |
E-Mail-Adresse des Standarddienstkontos, die Ihrem Projekt zugewiesen ist. |
/computeMetadata/v1/instance/service-accounts/default/ |
Listet alle Standarddienstkonten für Ihr Projekt auf. |
/computeMetadata/v1/instance/service-accounts/default/scopes |
Listet alle unterstützten Bereiche für die Standarddienstkonten auf. |
/computeMetadata/v1/instance/service-accounts/default/token |
Gibt das Authentifizierungstoken zurück, mit dem Ihre Anwendung gegenüber anderen Google Cloud APIs authentifiziert werden kann. |
Wenn Sie z. B. Ihre Projekt-ID abrufen möchten, senden Sie eine Anfrage an http://metadata.google.internal/computeMetadata/v1/project/project-id
.
Nachfolgend ist ein Beispiel für das Aufrufen der Metadatenendpunkte mithilfe von cURL oder der Google Cloud-Clientbibliothek:
Sitzungen
PHP bietet eine Sitzungsverwaltungsebene, mit der Webanwendungen Informationen zum Nutzerstatus zwischen Anfragen speichern können. Sitzungen in App Engine laufen weitgehend wie Sitzungen in anderen PHP-Anwendungen ab.
Mit dem folgenden Code können Sie in der Sitzung eines Nutzers eine Variable festlegen:
session_start();
$_SESSION['Foo'] = 'Bar';
Mit dem folgenden Code wird auf eine weitere Anfrage desselben Nutzers Bar
ausgegeben:
session_start();
print $_SESSION['Foo']; // prints Bar
Bei längeren Sitzungen sollten Sie einen alternativen Speicherdienst wie Cloud SQL verwenden.
Spezielle $_SERVER-Schlüssel
Mit PHP wird das spezielle Array $_SERVER[]
im Bereich von Anfragen verfügbar. Neben den Standard-CGI-Parametern ergänzt App Engine einige weitere nützliche Schlüssel:
GAE_APPLICATION
: Google Cloud-Projekt-ID der aktuellen AnwendungGAE_DEPLOYMENT_ID
: Quellcode-IDGAE_ENV
: App Engine-Standardumgebung oder flexible App Engine-Umgebung, in der die Anwendung ausgeführt wirdGAE_INSTANCE
: Name der aktuell ausgeführten InstanzGAE_MEMORY_MB
: Menge des für den Anwendungsprozess verfügbaren Speichers in MBGAE_RUNTIME
: Die in Ihrerapp.yaml
-Datei angegebene Laufzeit, z. B. php72GAE_SERVICE
: Name des aktuell bereitgestellten DienstesGAE_VERSION
: Name der aktuell bereitgestellten VersionGOOGLE_CLOUD_PROJECT
: Google Cloud-Projekt-IDHTTP_X_APPENGINE_CITY
: Name der Stadt, aus der die Anfrage stammt So kann z. B. eine Anfrage aus der Stadt Mountain View den Header-Wert "mountain view" enthalten.HTTP_X_APPENGINE_CITYLATLONG
: Breiten- und Längengrad der Stadt, von der die Anfrage stammt. Für eine Anfrage aus Mountain View kann dieser String etwa "37.386051,-122.083851" lauten.HTTP_X_APPENGINE_COUNTRY
: Das Land, aus dem die Anfrage stammt, als Ländercode gemäß ISO 3166-1 Alpha-2. App Engine ermittelt diesen Code anhand der IP-Adresse des Clients.HTTP_X_APPENGINE_HTTPS
: Bestätigt die HTTPS-NutzungHTTP_X_APPENGINE_REGION
: Name der Region, aus der die Anfrage stammt. Die Interpretation dieses Werts hängt von dem unterX-Appengine-Country
angegebenen Land ab. Wenn als Land z. B. "US" und als Region "ca" festgelegt ist, steht "ca" für "Kalifornien", nicht für "Kanada".HTTP_X_APPENGINE_USER_IP
: IP-Adresse des Clients Beachten Sie, dass$_SERVER['HTTP_X_APPENGINE_USER_IP']
die einzige Möglichkeit ist, die IP-Adresse des Clients von Ihrer Anwendung abzurufen. Die Variable$_SERVER['REMOTE_ADDR']
ist in App Engine nicht verfügbar.
Anweisungen mit neuen Initialisierungsstandards
In der folgenden Tabelle sind die Anweisungen aufgeführt, deren standardmäßigen Initialisierungswerte von den Anweisungen des PHP-Standardinterpreters abweichen, der über php.net verfügbar ist. Die Standardwerte für Anweisungen, die nicht in der folgenden Tabelle angegeben sind, finden Sie unter php.ini-Anweisungen.
Anweisung | Standardwert in App Engine |
---|---|
expose_php |
Off |
memory_limit |
-1 |
max_execution_time |
0 |
error_reporting |
E_ALL & ~E_DEPRECATED & ~E_STRICT |
display_errors |
Off |
display_startup_errors |
Off |
log_errors |
On |
log_errors_max_len |
0 |
ignore_repeated_errors |
Off |
ignore_repeated_source |
Off |
html_errors |
Off |
opcache.enable |
On |
opcache.validate_timestamps |
Off |
opcache.memory_consumption |
32 |
Sie können diese Standardanweisungen überschreiben, indem Sie diese in eine php.ini
-Datei für Ihre Anwendung einschließen.
Unterstützung für tempnam()
und sys_get_temp_dir()
App Engine-Anwendungen werden in einer Sicherheits-Sandbox ausgeführt, in der nur das Verzeichnis /tmp
beschreibbar ist und im RAM der Instanz gespeichert wird. Die App Engine-Version von tempnam()
gibt daher eine speicherinterne temporäre Datei zurück, die in eine permanente Speicherlösung wie Cloud Storage-Buckets geschrieben werden kann.
Das folgende Beispiel zeigt, wie Sie mithilfe von file_put_contents()
und fwrite()
in die speicherinterne temporäre Datei schreiben.
<?php
$dir = sys_get_temp_dir();
$tmp = tempnam($dir, "foo");
file_put_contents($tmp, "hello");
$f = fopen($tmp, "a");
fwrite($f, " world");
fclose($f);
echo file_get_contents($tmp);
Die erwartete Ausgabe des Beispiels ist:
hello world
Abhängigkeiten mit Composer verwalten
Weitere Informationen finden Sie auf der Seite Abhängigkeiten angeben.