Die PHP-Laufzeit ist der Softwarestack, der für die Installation Ihres Anwendungscodes und der Abhängigkeiten sowie für die Ausführung dieser Anwendung in der flexiblen Umgebung verantwortlich ist.
PHP-Versionen
PHP 8.3 verwendet Buildpacks. Eine vollständige Liste der unterstützten PHP-Versionen und deren entsprechende Ubuntu-Version finden Sie im Zeitplan für den Laufzeitsupport.
So verwenden Sie eine unterstützte PHP-Version:
Installieren Sie die
gcloud CLI
-Version 420.0.0 oder höher. Sie können die Befehlszeilentools mit dem Befehlgcloud components update
aktualisieren. Zum Aufrufen der installierten Version können Sie den Befehlgcloud version
ausführen.Fügen Sie die Einstellungen
runtime_config
undoperating_system
in die Dateiapp.yaml
ein, um ein Betriebssystem anzugeben.Deklarieren Sie den Dokumentenstamm für Ihre Anwendung in der Datei
app.yaml
:runtime: php env: flex runtime_config: operating_system: "ubuntu22" document_root: "web"
Obwohl Sie das Stammverzeichnis des Projekts (
.
) als Dokumentstamm angeben können, empfehlen wir Ihnen, ein Unterverzeichnis für die Einstellungdocument_root
zu verwenden.Der Quellcode befindet sich im Verzeichnis
/workspace
anstelle des Stammverzeichnisses (/
). Wenn Sie eine Konfiguration überschreiben, verweisen die ProzesseNGINX
odersupervisor
auf Ihre Konfigurationsdatei in diesem Verzeichnis. Zum Aktualisieren der entsprechenden Referenzen müssen Sie Folgendes tun:Aktualisieren Sie alle
include
-Anweisungen in Ihrer NGINX-Konfiguration relativ zu/workspace
anstelle von/etc/nginx
.Einige Dateien, z. B.
gzip_params
, sind nicht enthalten. Wenn Sie auf diese Dateien verweisen möchten, fügen Sie Ihr eigenes Dokument hinzu oder kopieren Sie es aus GitHub. Dateien wiemime.types
undfastcgi_params
sind im Verzeichnis/etc/nginx
verfügbar.Einige NGINX-Module wie
nginx-plus-module-ndk
sind nicht installiert. Legen Sie den Wert$docroot
fest oder fügen Sie den Wert manuell in der KonfigurationsdateiNGINX
hinzu.
Optional können Sie eine Laufzeitversion so angeben:
Fügen Sie die Einstellung
runtime_version
inapp.yaml
ein. Standardmäßig wird die neueste PHP-Version verwendet, wenn die Einstellungruntime_version
nicht angegeben ist.So geben Sie PHP 8.3 auf Ubuntu 22 an:
runtime: php env: flex runtime_config: operating_system: "ubuntu22" runtime_version: "8.3" document_root: .
So geben Sie die neueste unterstützte PHP-Version unter Ubuntu 22 an:
runtime: php env: flex runtime_config: operating_system: "ubuntu22" document_root: .
PHP-Version in die Datei
composer.json
aufnehmen.{ "require": { "php": "8.3.*" } }
Weitere Informationen finden Sie in der Referenz
app.yaml
.
Vorherige Laufzeitversionen
Damit Sie PHP-Version 7.3 und früher verwenden können, müssen Sie:
Den Dokumentstamm für Ihre Anwendung deklarieren. Dies können Sie in der Datei
app.yaml
tun:runtime: php env: flex api_version: 1 runtime_config: document_root: .
Obwohl Sie das Stammverzeichnis des Projekts (
.
) als Dokumentstamm angeben können, empfehlen wir Ihnen, ein Unterverzeichnis für die Einstellungdocument_root
zu verwenden.Geben Sie in der Datei
composer.json
eine PHP-Version an, damit Ihre Anwendung nicht automatisch aktualisiert wird, wenn eine neue PHP-Version zur Verfügung steht.{ "require": { "php": "7.3.*" } }
Unterstützung für andere PHP-Laufzeiten
Wenn Sie eine PHP-Version verwenden müssen, die nicht unterstützt wird, können Sie eine benutzerdefinierte Laufzeit erstellen und ein gültiges Basis-Image mit der von Ihnen benötigten PHP-Version auswählen.
Informationen zu von Google bereitgestellten Basis-Images oder Docker PHP-Basis-Images finden Sie unter Benutzerdefinierte Laufzeiten erstellen.
NGINX anpassen
Um eine benutzerdefinierte Konfigurationsdatei zu definieren, berücksichtigen Sie die Datei nginx-app.conf
im Stammverzeichnis Ihres Projekts.
Standardmäßig verwendet der Framework-Front-Controller die Datei index.php
. Möglicherweise müssen Sie dies für Ihr Projekt ändern. Beispielsweise verwendet das Symfony-Framework app.php
anstelle von index.php
. Sie können den Dateinamen im Abschnitt runtime_config
der Datei app.yaml
ändern:
runtime: php
env: flex
runtime_config:
operating_system: "ubuntu22"
document_root: .
front_controller_file: app.php
Bei Version 7.3 und früher ist die Konfigurationsdatei nginx-app.conf
im Serverabschnitt der Hauptkonfigurationsdatei NGINX
enthalten. Die Standardkonfigurationsdatei php-app.conf
enthält beispielsweise Folgendes:
location / {
# try to serve files directly, fallback to the front controller
try_files $uri /$front_controller_file$is_args$args;
}
Um eine benutzerdefinierte Konfigurationsdatei zu definieren, erstellen Sie die Datei nginx-app.conf
im Stammverzeichnis Ihres Projekts. Die Laufzeitumgebung überschreibt die Standarddatei mit der von Ihnen angegebenen Datei.
Standardmäßig verwendet der Framework-Front-Controller die Datei index.php
. Möglicherweise müssen Sie dies für Ihr Projekt ändern. Beispielsweise verwendet das Symfony-Framework app.php
anstelle von index.php
. Sie können den Dateinamen im Abschnitt runtime_config
der Datei app.yaml
ändern:
runtime: php
env: flex
runtime_config:
document_root: .
front_controller_file: app.php
OPcache
Aktivieren Sie OPcache in Ihrer php.ini
-Datei. Weitere Informationen zur Konfiguration von OPcache finden Sie in der offiziellen Dokumentation.
Erstellen oder bearbeiten Sie die Datei php.ini
mit der folgenden Zeile, um OPcache zu deaktivieren:
opcache.enable=0
Abhängigkeiten
Die Laufzeit sucht im Quellverzeichnis der Anwendung nach der Datei composer.json
und verwendet composer
, um Abhängigkeiten zu installieren, bevor die Anwendung gestartet wird. Weitere Informationen zum Deklarieren und Verwalten von Paketen finden Sie unter PHP-Bibliotheken verwenden.
PHP-Erweiterungen
Die folgenden PHP-Erweiterungen sind auf dem System vorinstalliert und aktiviert:
Unterstützte PHP-Versionen
- BCMath
- Bzip2
- Kalender
- ctype
- cURL
- DBA
- DOM
- Enchant
- EXIF
- Fileinfo
- Filter
- FTP
- GD
- Gettext
- GMP
- iconv
- Intl
- LDAP
- libxml
- mbstring
- MySQLi
- MySQLND
- OpenSSL
- pcntl
- PDO
- PDO_MYSQL
- PDO_PGSQL
- PDO_SQLITE
- PGSQL
- Phar
- POSIX
- Sitzung
- Shmop
- SimpleXML
- SOAP
- Sockets
- SQLite3
- Tidy
- Tokenizer
- XML
- XMLReader
- XMLWriter
- XSL
- zend_test
- Zip (nur Ubuntu 22)
- Zlib
Sie können die folgenden Erweiterungen mit der Datei php.ini
aktivieren:
- gRPC
- ImageMagick
- Mailparse
- Memcached
- mongodb
- OpenCensus
- OpenTelemetry (PHP-Version 8.1 und höher)
- OPcache
- protobuf
- Redis
v7.3 und älter
- APCu
- Bzip2
- cURL
- FPM
- GMP
- mbstring
- mcrypt
- libsodium
- Memcached
- MySQL (PDO) (verwendet mysqlnd)
- MySQLi (verwendet mysqlnd)
- OPcache
- OpenSSL
- pcntl
- PostgreSQL
- PostgreSQL (PDO)
- Readline
- recode
- sem
- Sockets
- Zip
- Zlib
Die folgenden PHP-Erweiterungen sind standardmäßig deaktiviert.
Sie können die folgenden Erweiterungen in der Datei php.ini
aktivieren:
- amqp
- APM (7.0+)
- BCMath
- Bitset
- Kalender
- Cassandra
- couchbase (7.0+)
- ds (7.0+)
- eio
- ev
- event
- Exif
- FTP
- GD (unterstützt PNG, JPEG und FreeType)
- gettext
- gRPC
- hprose
- igbinary
- intl
- ImageMagick
- jsond
- krb5
- lua (7.0+)
- LZF
- memprof
- mongodb
- MySQL (5.6)
- oauth
- OpenCensus
- PCNTL
- Phalcon (5.6, 7.0)
- pq
- protobuf
- rdkafka
- Redis
- SeasLog
- Shmop
- SOAP
- SQLite3
- SQLite (PDO)
- stomp
- swoole
- sync
- tcpwrap
- timezonedb
- v8js (7.0+)
- vips (7.0+)
- XMLRPC
- XSL
- yaconf (7.0+)
- yaf
- yaml
Zum Aktivieren einer Erweiterung fügen Sie im Stammverzeichnis Ihrer Anwendung die Datei php.ini
mit der Anweisung extension
hinzu:
; Enable the Redis extension
extension=redis.so
; Enable the OpenTelemetry extension (must be in an opentelemetry section)
[opentelemetry]
extension=opentelemetry.so
Alternativ können Sie eine Erweiterung auch aktivieren, indem Sie composer.json
ein require
hinzufügen:
{
"require": {
"ext-redis": "*"
}
}
Diese Pakete lassen die Installation der gängigsten PHP-Erweiterungen zu. Wenn die Anwendung weitere Abhängigkeiten auf Betriebssystemebene erfordert, müssen Sie die PHP-Laufzeit erweitern oder eine benutzerdefinierte Laufzeit verwenden, um die entsprechenden Pakete zu installieren.
HTTPS- und Weiterleitungs-Proxys
App Engine beendet die HTTPS-Verbindung am Load-Balancer und leitet die Anfrage zu Ihrer Anwendung weiter. Der NGINX-Server ist so konfiguriert, dass die HTTPS-Umgebungsvariable ($_SERVER["HTTPS"]
) auf on
gesetzt wird, wenn die Anfrage über HTTPS erfolgt.
Einige Anwendungen müssen auch die IP-Adresse des Nutzers ermitteln. Diese Funktion ist im Standard-Header X-Forwarded-For
verfügbar.
Deaktivierte Funktionen
Die folgenden Funktionen werden mit der Anweisung disable_functions
in php.ini
deaktiviert:
exec
passthru
proc_open
proc_close
shell_exec
show_source
symlink
system
Wenn Sie eine der oben genannten Funktionen benötigen, fügen Sie im Stammverzeichnis Ihrer Anwendung die Datei php.ini
hinzu und ändern Sie die Anweisung disable_functions
. Alternativ legen Sie whitelist_functions
im Abschnitt runtime_config
in der Datei app.yaml
als eine durch Kommas getrennte Funktionsliste fest, um die Zulassung zu aktivieren.
In PHP-Version 7.3 und früher ist die Erweiterung Suhosin Securit standardmäßig installiert und für die Ausführung im Simulationsmodus konfiguriert.
Der Simulationsmodus protokolliert die Verwendung potenziell gefährlicher Funktionen, die in der Cloud Logging-Benutzeroberfläche angezeigt werden. Wenn Sie den Simulationsmodus deaktivieren, wird Ihre Anwendung bei der Verwendung einer potenziell gefährlichen Funktion beendet.
Zum Aktivieren dieser zusätzlichen Sicherheitsfunktion fügen Sie im Stammverzeichnis des Projekts php.ini
mit der folgenden Option hinzu:
; Prevent the use of potentially dangerous functions rather than logging them
suhosin.simulation = Off
Gepatchte Funktionen
Die Funktion parse_str
ist gepatcht und der zweite Parameter ist obligatorisch. Wenn Sie parse_str
mit nur einem Parameter aufrufen, wird eine Warnung ausgegeben und die Funktion wird nicht aufgerufen.
Verfügbare Konfigurationen
Sie können die folgenden Konfigurationen im Abschnitt runtime_config
einfügen:
Name | Beschreibung | Standardwert |
---|---|---|
document_root |
Legt DOCUMENT_ROOT für nginx und PHP fest. Sie müssen einen relativen Pfad zum Projektstammverzeichnis verwenden.
|
Pflichtfeld |
composer_flags |
Sie können mit diesem Schlüssel einige Composer-Flags überschreiben. | --no-dev --prefer-dist |
enable_stackdriver_integration |
Wird nur für Version 7.3 und früher unterstützt.
Wenn dieser Wert auf "true" gesetzt ist, aktiviert die Laufzeit automatisch die Integration von Google Cloud Observability. Für diese Konfiguration ist das google/cloud -Paket ab v0.33 erforderlich.
|
false |
skip_lockdown_document_root |
Wird nur für Version 7.3 und früher unterstützt.
Standardmäßig erteilt die Laufzeit für alle Dateien und Verzeichnisse im Verzeichnis document_root ausschließlich Leseberechtigungen.
Wenn dafür true festgelegt wird, überspringt die Laufzeit die Änderung der Berechtigung.
|
false |
whitelist_functions |
Wird nur für Version 7.3 und früher unterstützt. Eine durch Kommas getrennte Liste der Funktionsnamen, die zugelassen werden sollen. | Leerer String |
front_controller_file |
Standard-PHP-Dateiname für den Verzeichniszugriff. | index.php |
nginx_conf_http_include |
Dateiname einer partiellen nginx-Konfiguration, die im Abschnitt http in der nginx-Hauptkonfigurationsdatei enthalten sein soll.
|
nginx-http.conf |
nginx_conf_include |
Dateiname einer partiellen nginx-Konfiguration, die im Abschnitt server in der nginx-Hauptkonfigurationsdatei enthalten sein soll.
|
nginx-app.conf |
nginx_conf_override |
Dateiname einer benutzerdefinierten nginx-Konfigurationsdatei, die als nginx-Hauptkonfigurationsdatei verwendet wird. | nginx.conf |
php_fpm_conf_override |
Dateiname einer vom Nutzer bereitgestellten php-fpm-Konfigurationsdatei, die unten im Abschnitt [app] eingefügt wird, um die vorhandenen Konfigurationen zu überschreiben.
|
php-fpm.conf |
php_ini_override |
Dateiname einer von einem Nutzer bereitgestellten PHP-Konfigurationsdatei. | php.ini |
supervisord_conf_addition |
Dateiname einer von einem Nutzer bereitgestellten supervisord-Konfigurationsdatei, die in der supervisord-Hauptkonfigurationsdatei enthalten ist. | additional-supervisord.conf |
supervisord_conf_override |
Dateiname einer von einem Nutzer bereitgestellten supervisord-Konfigurationsdatei, die die supervisord-Hauptkonfigurationsdatei überschreibt. | supervisord.conf |
supervisord in der PHP-Laufzeit konfigurieren
Die flexible App Engine-Umgebung nutzt supervisord für die Prozessverwaltung. Standardmäßig führt supervisord
nginx
und php-fpm
aus, um PHP-Webanwendungen auszuführen. Einige Anwendungen müssen jedoch externe Prozesse ausführen. Außerdem brauchen solche Anwendungen manchmal nicht einmal nginx
oder php-fpm
.
Wenn Sie einen Prozess hinzufügen möchten, der von supervisord
verwaltet wird, fügen Sie im Stammverzeichnis des Projekts eine Datei mit dem Namen additional-supervisord.conf
hinzu. Der Inhalt dieser Konfigurationsdatei kann dann zum Beispiel so aussehen:
Wenn Sie nginx
und php-fpm
durch Ihren Prozess ersetzen möchten, fügen Sie dem Stammverzeichnis des Projekts die Datei supervisord.conf
hinzu. Der Inhalt dieser Konfigurationsdatei kann dann zum Beispiel so aussehen:
Laufzeit erweitern
Die flexible App Engine-Umgebung für PHP kann zum Erstellen einer benutzerdefinierten Laufzeit verwendet werden. Weitere Informationen finden Sie unter PHP-Laufzeitumgebung anpassen.
Umgebungsvariablen
Die folgenden Umgebungsvariablen werden durch die Laufzeitumgebung festgelegt:
Umgebungsvariable | Beschreibung |
---|---|
GAE_INSTANCE |
Der Name der aktuellen Instanz |
GAE_MEMORY_MB |
Die Größe des für den Anwendungsprozess verfügbaren Speichers |
GAE_SERVICE |
Der in der Datei app.yaml Ihrer Anwendung angegebene Dienstname. Wenn kein Dienstname angegeben ist, wird als Wert default festgelegt. |
GAE_VERSION |
Das Versionslabel der aktuellen Anwendung |
GOOGLE_CLOUD_PROJECT |
Die mit Ihrer Anwendung verknüpfte Projekt-ID, die in der Google Cloud Console angezeigt wird |
PORT |
Der Port, der HTTP-Anfragen empfängt |
Sie können mit app.yaml
noch weitere Umgebungsvariablen festlegen.
Metadatenserver
Jede Instanz Ihrer Anwendung kann den Compute Engine-Metadatenserver verwenden, um Informationen über die Instanz abzufragen, einschließlich ihres Hostnamens, ihrer externen IP-Adresse, Instanz-ID, benutzerdefinierten Metadaten und Dienstkontoinformationen. Sie können in App Engine nicht für jede einzelne Instanz benutzerdefinierte Metadaten festlegen. Sie haben aber die Möglichkeit, projektweite benutzerdefinierte Metadaten festzulegen und diese aus den App Engine- und Compute Engine-Instanzen zu lesen.
Diese Beispielfunktion ruft die externe IP-Adresse einer Instanz über den Metadatenserver ab: