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.4 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 updateaktualisieren. Zum Aufrufen der installierten Version können Sie den Befehlgcloud versionausführen.Fügen Sie die Einstellungen
runtime_configundoperating_systemin die Dateiapp.yamlein, 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_rootzu verwenden.Der Quellcode befindet sich im Verzeichnis
/workspaceanstelle des Stammverzeichnisses (/). Wenn Sie eine Konfiguration überschreiben, verweisen die ProzesseNGINXodersupervisorauf 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/workspaceanstelle 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.typesundfastcgi_paramssind im Verzeichnis/etc/nginxverfügbar.Einige NGINX-Module wie
nginx-plus-module-ndksind nicht installiert. Legen Sie den Wert$docrootfest oder fügen Sie den Wert manuell in der KonfigurationsdateiNGINXhinzu.
Optional können Sie eine Laufzeitversion so angeben:
Fügen Sie die Einstellung
runtime_versioninapp.yamlein. Standardmäßig wird die neueste PHP-Version verwendet, wenn die Einstellungruntime_versionnicht angegeben ist.So geben Sie PHP 8.4 auf Ubuntu 22 an:
runtime: php env: flex runtime_config: operating_system: "ubuntu22" runtime_version: "8.4" 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.jsonaufnehmen.{ "require": { "php": "8.4.*" } }
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.yamltun: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_rootzu verwenden.Geben Sie in der Datei
composer.jsoneine 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-Basis-Images für PHP 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:
execpassthruproc_openproc_closeshell_execshow_sourcesymlinksystem
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.
|
falsch |
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.
|
falsch |
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 |
Sie können festlegen, ob Nginx statische Dateien für übereinstimmende URIs bereitstellt, indem Sie die Umgebungsvariable NGINX_SERVES_STATIC_FILES im Abschnitt build_env_variables Ihrer app.yaml-Datei festlegen:
runtime: php
env: flex
runtime_config:
document_root: "web"
operating_system: "ubuntu22"
build_env_variables:
NGINX_SERVES_STATIC_FILES: true
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 -Konsole 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: