El tiempo de ejecución de PHP es la pila de software encargada de instalar el código de tu aplicación y sus dependencias, y de ejecutarla en el entorno flexible.
Versiones de PHP
PHP 8.4 usa buildpacks. Para ver la lista completa de versiones de PHP admitidas y sus versiones de Ubuntu correspondientes, consulta la programación de asistencia de tiempo de ejecución.
Para usar una versión de PHP compatible, debes hacer lo siguiente:
Instala la versión 420.0.0 o una posterior de
gcloud CLI
. Puedes actualizar tus herramientas de CLI ejecutando el comandogcloud components update
. Para ver la versión instalada, puedes ejecutar el comandogcloud version
.Incluya los ajustes
runtime_config
yoperating_system
en el archivoapp.yaml
para especificar un sistema operativo.Declara la raíz del documento de tu aplicación en el archivo
app.yaml
:runtime: php env: flex runtime_config: operating_system: "ubuntu22" document_root: "web"
Aunque puedes especificar el directorio raíz del proyecto (
.
) como raíz del documento, te recomendamos que uses un subdirectorio para la opcióndocument_root
.El código fuente se encuentra en el directorio
/workspace
en lugar de en el directorio raíz (/
). Si anulas alguna configuración, los procesosNGINX
osupervisor
harán referencia a tu archivo de configuración en este directorio. Para actualizar las referencias correspondientes, debes hacer lo siguiente:Actualiza cualquier instrucción
include
de tu configuración de NGINX para que sea relativa a/workspace
en lugar de a/etc/nginx
.Algunos archivos, como
gzip_params
, no se incluyen. Para hacer referencia a estos archivos, incluye los tuyos o cópialos de GitHub. Los archivosmime.types
yfastcgi_params
están disponibles en el directorio/etc/nginx
.Algunos módulos de NGINX, como
nginx-plus-module-ndk
, no están instalados. Define el valor de$docroot
o añádelo manualmente en el archivo de configuraciónNGINX
.
También puedes especificar una versión del tiempo de ejecución de las siguientes formas:
Incluir el ajuste
runtime_version
en tuapp.yaml
. De forma predeterminada, se usa la versión más reciente de PHP si no se especifica el ajusteruntime_version
.Para especificar PHP 8.4 en Ubuntu 22, sigue estos pasos:
runtime: php env: flex runtime_config: operating_system: "ubuntu22" runtime_version: "8.4" document_root: .
Para especificar la versión de PHP más reciente compatible en Ubuntu 22, sigue estos pasos:
runtime: php env: flex runtime_config: operating_system: "ubuntu22" document_root: .
Incluir una versión de PHP en el archivo
composer.json
.{ "require": { "php": "8.4.*" } }
Consulta la referencia de
app.yaml
para obtener más información.
Versiones anteriores del entorno de ejecución
Para usar PHP 7.3 y versiones anteriores, debes hacer lo siguiente:
Declara la raíz del documento de tu aplicación. Puedes hacerlo en tu archivo
app.yaml
:runtime: php env: flex api_version: 1 runtime_config: document_root: .
Aunque puedes especificar el directorio raíz del proyecto (
.
) como raíz del documento, te recomendamos que uses un subdirectorio para la opcióndocument_root
.Especifica una versión de PHP en el archivo
composer.json
para evitar que tu aplicación se actualice automáticamente cuando haya una nueva versión de PHP disponible.{ "require": { "php": "7.3.*" } }
Compatibilidad con otros entornos de ejecución de PHP
Si necesitas usar una versión de PHP que no sea compatible, puedes crear un tiempo de ejecución personalizado y seleccionar una imagen base válida con la versión de PHP que necesites.
Para obtener imágenes base proporcionadas por Google o imágenes base de Docker PHP, consulta Crear tiempos de ejecución personalizados.
Personalizar NGINX
Para definir un archivo de configuración personalizado, incluye el archivo nginx-app.conf
en el directorio raíz de tu proyecto.
De forma predeterminada, el controlador frontal del framework usa el archivo index.php
. Es posible que tengas que cambiarlo por otro valor en tu proyecto. Por ejemplo, el framework Symfony usa app.php
en lugar de index.php
. Puedes cambiar el nombre de archivo en la sección runtime_config
de tu archivo app.yaml
:
runtime: php
env: flex
runtime_config:
operating_system: "ubuntu22"
document_root: .
front_controller_file: app.php
En la versión 7.3 y anteriores, el archivo de configuración nginx-app.conf
se incluye en la sección del servidor del archivo de configuración principal NGINX
. Por ejemplo, el archivo de configuración predeterminado php-app.conf
contiene lo siguiente:
location / {
# try to serve files directly, fallback to the front controller
try_files $uri /$front_controller_file$is_args$args;
}
Para definir un archivo de configuración personalizado, crea el archivo nginx-app.conf
en el directorio raíz de tu proyecto. El tiempo de ejecución anula el archivo predeterminado con el archivo que proporciones.
De forma predeterminada, el controlador frontal del framework usa el archivo index.php
. Es posible que tengas que cambiarlo por otro valor en tu proyecto. Por ejemplo, el framework Symfony usa app.php
en lugar de index.php
. Puedes cambiar el nombre de archivo en la sección runtime_config
de tu archivo app.yaml
:
runtime: php
env: flex
runtime_config:
document_root: .
front_controller_file: app.php
OPcache
Habilita OPcache en el archivo php.ini
. Consulta la documentación oficial para saber cómo configurar OPcache.
Para inhabilitar OPcache, crea o edita el archivo php.ini
con la siguiente línea:
opcache.enable=0
Dependencias
El tiempo de ejecución busca un archivo composer.json
en el directorio de origen de tu aplicación y usa composer
para instalar las dependencias antes de iniciar la aplicación. Para obtener más información sobre cómo declarar y gestionar paquetes, consulta Usar bibliotecas de PHP.
Usar extensiones de PHP
Las siguientes extensiones de PHP están preinstaladas y habilitadas en el sistema:
Versiones de PHP compatibles
- BCMath
- Bzip2
- Calendar
- ctype
- cURL
- DBA
- DOM
- Enchant
- EXIF
- Fileinfo
- Filtro
- FTP
- GD
- Gettext
- GMP
- iconv
- Intl
- LDAP
- libxml
- mbstring
- MySQLi
- MySQLND
- OpenSSL
- pcntl
- PDO
- PDO_MYSQL
- PDO_PGSQL
- PDO_SQLITE
- PGSQL
- Phar
- POSIX
- Sesión
- Shmop
- SimpleXML
- SOAP
- Sockets
- SQLite3
- Tidy
- Tokenizador
- XML
- XMLReader
- XMLWriter
- XSL
- zend_test
- Zip (solo en Ubuntu 22)
- Zlib
Puedes habilitar las siguientes extensiones mediante el archivo php.ini
:
- gRPC
- ImageMagick
- Mailparse
- Memcached
- mongodb
- OpenCensus
- OpenTelemetry (PHP 8.1 y versiones posteriores)
- OPcache
- protobuf
- Redis
v7.3 y versiones anteriores
- APCu
- Bzip2
- cURL
- FPM
- GMP
- mbstring
- mcrypt
- libsodium
- Memcached
- MySQL (PDO) (usa mysqlnd)
- MySQLi (usa mysqlnd)
- OPcache
- OpenSSL
- pcntl
- PostgreSQL
- PostgreSQL (PDO)
- Readline
- recodificar
- sem
- Sockets
- Zip
- Zlib
Las siguientes extensiones de PHP están inhabilitadas de forma predeterminada.
Puedes habilitar las siguientes extensiones en el archivo php.ini
:
- amqp
- APM (7.0+)
- BCMath
- Bitset
- Calendar
- Cassandra
- couchbase (7.0+)
- ds (7.0+)
- eio
- ev
- evento
- Exif
- FTP
- GD (con compatibilidad con PNG, JPEG y 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)
- pisotón
- swoole
- sincronizar
- tcpwrap
- timezonedb
- v8js (7.0+)
- vips (7.0+)
- XMLRPC
- XSL
- yaconf (7.0+)
- yaf
- yaml
Para habilitar una extensión, añade un archivo php.ini
en la raíz de tu aplicación con la directiva extension
:
; Enable the Redis extension
extension=redis.so
; Enable the OpenTelemetry extension (must be in an opentelemetry section)
[opentelemetry]
extension=opentelemetry.so
También puedes habilitar una extensión añadiendo un require
a tu
composer.json
:
{
"require": {
"ext-redis": "*"
}
}
Estos paquetes permiten la instalación de las extensiones de PHP más populares. Si tu aplicación requiere dependencias adicionales a nivel del sistema operativo, debes ampliar el tiempo de ejecución de PHP o usar un tiempo de ejecución personalizado para instalar los paquetes adecuados.
Proxies HTTPS y de reenvío
App Engine finaliza la conexión HTTPS en el balanceador de carga y reenvía la solicitud a tu aplicación. El servidor NGINX está configurado para asignar el valor on
a la variable de entorno HTTPS ($_SERVER["HTTPS"]
) cuando la solicitud se hace a través de HTTPS.
Algunas aplicaciones también necesitan determinar la dirección IP del usuario. Esta opción está disponible en el encabezado X-Forwarded-For
estándar.
Funciones inhabilitadas
Las siguientes funciones están inhabilitadas con la directiva disable_functions
en php.ini
:
exec
passthru
proc_open
proc_close
shell_exec
show_source
symlink
system
Si necesitas alguna de las funciones anteriores, añade un archivo php.ini
en la raíz de tu aplicación y cambia la directiva disable_functions
. También puedes definir whitelist_functions
en la sección runtime_config
de app.yaml
como una lista de funciones separadas por comas para permitirlas.
En PHP 7.3 y versiones anteriores, la extensión de seguridad Suhosin se instala y configura de forma predeterminada para que se ejecute en modo de simulación.
En el modo de simulación se registra el uso de funciones potencialmente peligrosas, que se mostrarán en la interfaz de usuario de Cloud Logging. Si desactivas el modo de simulación, la aplicación se cerrará cuando se utilice una función potencialmente peligrosa.
Para habilitar esta función de seguridad adicional, añade un php.ini
en la raíz de tu proyecto
con la siguiente opción:
; Prevent the use of potentially dangerous functions rather than logging them
suhosin.simulation = Off
Funciones parcheadas
La función parse_str
se ha parcheado y el segundo parámetro es obligatorio. Si llamas a parse_str
con un solo parámetro, se mostrará una advertencia y no se llamará a la función.
Configuraciones disponibles
Puede incluir las siguientes configuraciones en la sección runtime_config
:
Nombre | Descripción | Valor predeterminado |
---|---|---|
document_root |
Especifica DOCUMENT_ROOT para nginx y PHP. Debes usar
una ruta relativa desde el directorio raíz del proyecto.
|
Campo obligatorio |
composer_flags |
Puedes anular algunas de las marcas del compositor con esta clave. | --no-dev --prefer-dist |
enable_stackdriver_integration |
Solo se admite en la versión 7.3 y anteriores.
Si se le asigna el valor true, el tiempo de ejecución habilitará automáticamente la integración de Google Cloud Observability. Esta configuración requiere el paquete google/cloud
v0.33 o una versión posterior.
|
falso |
skip_lockdown_document_root |
Solo se admite en la versión 7.3 y anteriores.
De forma predeterminada, el tiempo de ejecución asignará un permiso de solo lectura estricto a todos los archivos y directorios de la carpeta document_root .
Si se le asigna el valor true , el tiempo de ejecución omitirá el cambio del permiso.
|
falso |
whitelist_functions |
Solo se admite en la versión 7.3 y anteriores. Lista de nombres de funciones separada por comas que se van a incluir en la lista de permitidas. | Una cadena vacía |
front_controller_file |
Nombre de archivo PHP predeterminado para el acceso al directorio. | index.php |
nginx_conf_http_include |
Nombre de archivo de una configuración parcial de nginx, que se incluirá en la sección http del archivo de configuración principal de nginx.
|
nginx-http.conf |
nginx_conf_include |
Nombre de archivo de una configuración parcial de nginx que se incluirá en la sección server del archivo de configuración principal de nginx.
|
nginx-app.conf |
nginx_conf_override |
Nombre de archivo de un archivo de configuración de nginx proporcionado por el usuario, que se usará como archivo de configuración principal de nginx. | nginx.conf |
php_fpm_conf_override |
Nombre de archivo de un archivo de configuración de php-fpm proporcionado por el usuario, que se incluirá en la parte inferior de la sección [app] para que sustituya las configuraciones existentes.
|
php-fpm.conf |
php_ini_override |
Nombre de archivo de un archivo de configuración de PHP proporcionado por el usuario. | php.ini |
supervisord_conf_addition |
Nombre de archivo de un archivo de configuración de supervisord proporcionado por el usuario, que se incluirá en el archivo de configuración principal de supervisord. | additional-supervisord.conf |
supervisord_conf_override |
Nombre de archivo de un archivo de configuración de supervisord proporcionado por el usuario, que anulará el archivo de configuración principal de supervisord. | supervisord.conf |
Puedes controlar si Nginx sirve archivos estáticos para URIs coincidentes configurando la variable de entorno NGINX_SERVES_STATIC_FILES
en la sección build_env_variables
de tu archivo app.yaml
:
runtime: php
env: flex
runtime_config:
document_root: "web"
operating_system: "ubuntu22"
build_env_variables:
NGINX_SERVES_STATIC_FILES: true
Configurar supervisord en el entorno de ejecución de PHP
El entorno flexible de App Engine usa supervisord para gestionar procesos. De forma predeterminada, supervisord
ejecuta nginx
y php-fpm
para ejecutar aplicaciones web PHP. Sin embargo, algunas aplicaciones necesitan ejecutar procesos externos. Además, a veces estas aplicaciones ni siquiera necesitan nginx
ni php-fpm
.
Si quieres añadir un proceso gestionado por supervisord
, añade un archivo llamado
additional-supervisord.conf
al directorio raíz del proyecto. A continuación, se muestra un ejemplo del contenido de un archivo de configuración para este caso:
Si quieres sustituir nginx
y php-fpm
por tu proceso, añade un archivo llamado supervisord.conf
al directorio raíz del proyecto. A continuación, se muestra un ejemplo del contenido de un archivo de configuración para este caso:
Prolongar el tiempo de ejecución
El tiempo de ejecución de PHP del entorno flexible de App Engine se puede usar para crear un tiempo de ejecución personalizado. Para obtener más información, consulta Personalizar el entorno de ejecución de PHP.
Variables de entorno
El entorno de ejecución define las siguientes variables de entorno:
Variable de entorno | Descripción |
---|---|
GAE_INSTANCE |
Nombre de la instancia actual. |
GAE_MEMORY_MB |
Cantidad de memoria disponible para el proceso de la aplicación. |
GAE_SERVICE |
El nombre del servicio especificado en el archivo app.yaml
de tu aplicación o, si no se ha especificado ningún nombre de servicio, se define como default . |
GAE_VERSION |
Etiqueta de versión de la aplicación actual. |
GOOGLE_CLOUD_PROJECT |
El ID del proyecto asociado a tu aplicación, que se puede ver en la Google Cloud consola |
PORT |
Puerto que recibirá las solicitudes HTTP. |
Puedes definir variables de entorno adicionales con app.yaml
.
Servidor de metadatos
Cada instancia de tu aplicación puede usar el servidor de metadatos de Compute Engine para consultar información sobre la instancia, como su nombre de host, su dirección IP externa, su ID de instancia, sus metadatos personalizados y la información de su cuenta de servicio. App Engine no te permite definir metadatos personalizados para cada instancia, pero puedes definir metadatos personalizados de todo el proyecto y leerlos desde tus instancias de App Engine y Compute Engine.
Esta función de ejemplo usa el servidor de metadatos para obtener la dirección IP externa de una instancia: