O tempo de execução do PHP é a pilha de software responsável por instalar o código da aplicação e as dependências e, em seguida, executar essa aplicação no ambiente flexível.
Versões do PHP
O PHP 8.4 usa buildpacks. Para ver a lista completa das versões do PHP suportadas e a respetiva versão do Ubuntu, consulte a Programação de suporte de tempo de execução.
Para usar uma versão do PHP suportada, tem de:
Instale a versão
gcloud CLI
420.0.0 ou posterior. Pode atualizar as ferramentas de CLI executando o comandogcloud components update
. Para ver a versão instalada, pode executar o comandogcloud version
.Inclua as definições
runtime_config
eoperating_system
no ficheiroapp.yaml
para especificar um sistema operativo.Declare a raiz do documento para a sua aplicação no ficheiro
app.yaml
:runtime: php env: flex runtime_config: operating_system: "ubuntu22" document_root: "web"
Embora possa especificar o diretório raiz do projeto (
.
) como a raiz do documento, recomendamos que use um subdiretório para a definiçãodocument_root
.O código-fonte está localizado no diretório
/workspace
em vez do diretório raiz (/
). Se substituir alguma configuração, os processosNGINX
ousupervisor
referenciam o ficheiro de configuração neste diretório. Para atualizar as referências correspondentes, tem de:Atualize todas as declarações
include
na sua configuração do NGINX para serem relativas a/workspace
em vez de/etc/nginx
.Alguns ficheiros, como
gzip_params
, não estão incluídos. Para fazer referência a estes ficheiros, inclua os seus próprios ficheiros ou copie-os do GitHub. Os ficheiros, comomime.types
efastcgi_params
, estão disponíveis no diretório/etc/nginx
.Alguns módulos do NGINX, como
nginx-plus-module-ndk
, não estão instalados. Defina o valor de$docroot
ou adicione o valor manualmente no ficheiro de configuraçãoNGINX
.
Opcionalmente, pode especificar uma versão do tempo de execução:
Incluindo a definição
runtime_version
no seuapp.yaml
. Por predefinição, é usada a versão mais recente do PHP se a definiçãoruntime_version
não for especificada.Para especificar o PHP 8.4 no Ubuntu 22:
runtime: php env: flex runtime_config: operating_system: "ubuntu22" runtime_version: "8.4" document_root: .
Para especificar a versão do PHP mais recente suportada no Ubuntu 22:
runtime: php env: flex runtime_config: operating_system: "ubuntu22" document_root: .
Incluindo uma versão PHP no ficheiro
composer.json
.{ "require": { "php": "8.4.*" } }
Consulte a referência
app.yaml
para mais informações.
Versões de tempo de execução anteriores
Para usar o PHP versão 7.3 e anterior, tem de:
Declare a raiz do documento para a sua aplicação. Pode fazê-lo no ficheiro
app.yaml
:runtime: php env: flex api_version: 1 runtime_config: document_root: .
Embora possa especificar o diretório raiz do projeto (
.
) como a raiz do documento, recomendamos que use um subdiretório para a definiçãodocument_root
.Especifique uma versão do PHP no ficheiro
composer.json
para impedir que a sua aplicação seja atualizada automaticamente quando estiver disponível uma nova versão do PHP.{ "require": { "php": "7.3.*" } }
Suporte de outros tempos de execução do PHP
Se precisar de usar uma versão do PHP que não seja suportada, pode criar um tempo de execução personalizado e selecionar uma imagem base válida com a versão do PHP de que precisa.
Para imagens base fornecidas pela Google ou imagens base do Docker PHP, consulte o artigo Criar tempos de execução personalizados.
Personalize o NGINX
Para definir um ficheiro de configuração personalizado, inclua o ficheiro nginx-app.conf
no diretório raiz do seu projeto.
Por predefinição, o controlador frontal da framework usa o ficheiro index.php
. Pode ter de alterar esta definição para algo diferente para o seu projeto. Por exemplo, a framework Symfony usa app.php
em vez de index.php
. Pode alterar o nome do ficheiro na secção runtime_config
do ficheiro app.yaml
:
runtime: php
env: flex
runtime_config:
operating_system: "ubuntu22"
document_root: .
front_controller_file: app.php
Para a versão 7.3 e anteriores, o ficheiro de configuração nginx-app.conf
está incluído na secção do servidor do ficheiro de configuração NGINX
principal. Por exemplo, o ficheiro de configuração predefinida php-app.conf
contém o seguinte:
location / {
# try to serve files directly, fallback to the front controller
try_files $uri /$front_controller_file$is_args$args;
}
Para definir um ficheiro de configuração personalizado, crie o ficheiro nginx-app.conf
no diretório raiz do seu projeto. O tempo de execução substitui o ficheiro predefinido pelo ficheiro que fornecer.
Por predefinição, o controlador frontal da framework usa o ficheiro index.php
. Pode ter de alterar esta definição para algo diferente para o seu projeto. Por exemplo, a framework Symfony usa app.php
em vez de index.php
. Pode alterar o nome do ficheiro na secção runtime_config
do ficheiro app.yaml
:
runtime: php
env: flex
runtime_config:
document_root: .
front_controller_file: app.php
OPcache
Ative o OPcache no seu ficheiro php.ini
. Consulte o documento oficial para saber como
configurar o OPcache.
Para desativar o OPcache, crie ou edite o ficheiro php.ini
com a seguinte linha:
opcache.enable=0
Dependências
O tempo de execução procura um ficheiro composer.json
no diretório de origem da sua aplicação e usa composer
para instalar quaisquer dependências antes de iniciar a aplicação. Para mais informações sobre como declarar e gerir pacotes, consulte o artigo Usar bibliotecas PHP.
Usar extensões PHP
As seguintes extensões PHP estão pré-instaladas e ativadas no sistema:
Versões do PHP compatíveis
- BCMath
- Bzip2
- Calendário
- 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
- Sessão
- Shmop
- SimpleXML
- SOAP
- Tomadas
- SQLite3
- Tidy
- Tokenizer
- XML
- XMLReader
- XMLWriter
- XSL
- zend_test
- Zip (apenas no Ubuntu 22)
- Zlib
Pode ativar as seguintes extensões através do ficheiro php.ini
:
- gRPC
- ImageMagick
- Mailparse
- Memcached
- mongodb
- OpenCensus
- OpenTelemetry (versão 8.1 e posterior do PHP)
- OPcache
- protobuf
- Redis
v7.3 e anteriores
- APCu
- Bzip2
- cURL
- FPM
- GMP
- mbstring
- mcrypt
- libsodium
- Memcached
- MySQL (PDO) (usa mysqlnd)
- MySQLi (usa mysqlnd)
- OPcache
- OpenSSL
- pcntl
- PostgreSQL
- PostgreSQL (PDO)
- Readline
- recode
- sem
- Tomadas
- Zip
- Zlib
As seguintes extensões PHP estão desativadas por predefinição.
Pode ativar as seguintes extensões no ficheiro php.ini
:
- amqp
- APM (7.0 ou superior)
- BCMath
- Bitset
- Calendário
- Cassandra
- couchbase (7.0 ou superior)
- ds (7.0+)
- eio
- ev
- evento
- Exif
- FTP
- GD (com suporte para PNG, JPEG e FreeType)
- gettext
- gRPC
- hprose
- igbinary
- intl
- ImageMagick
- jsond
- krb5
- lua (7.0 ou superior)
- LZF
- memprof
- mongodb
- MySQL (5.6)
- oauth
- OpenCensus
- PCNTL
- Phalcon (5.6 e 7.0)
- pq
- protobuf
- rdkafka
- Redis
- SeasLog
- Shmop
- SOAP
- SQLite3
- SQLite (PDO)
- stomp
- swoole
- sincronizar
- tcpwrap
- timezonedb
- v8js (7.0 ou superior)
- vips (7.0 ou superior)
- XMLRPC
- XSL
- yaconf (7.0 ou superior)
- yaf
- yaml
Para ativar uma extensão, adicione um ficheiro php.ini
na raiz da sua aplicação com a diretiva extension
:
; Enable the Redis extension
extension=redis.so
; Enable the OpenTelemetry extension (must be in an opentelemetry section)
[opentelemetry]
extension=opentelemetry.so
Em alternativa, também pode ativar uma extensão adicionando um require
ao seu
composer.json
:
{
"require": {
"ext-redis": "*"
}
}
Estes pacotes permitem a instalação das extensões PHP mais populares. Se a sua aplicação exigir dependências adicionais ao nível do sistema operativo, tem de estender o tempo de execução do PHP ou usar um tempo de execução personalizado para instalar os pacotes adequados.
HTTPS e proxies de encaminhamento
O App Engine termina a ligação HTTPS no balanceador de carga e encaminha o pedido para a sua aplicação. O servidor NGINX está configurado para definir a variável de ambiente HTTPS ($_SERVER["HTTPS"]
) como on
quando o pedido é feito através de HTTPS.
Algumas aplicações também precisam de determinar o endereço IP do utilizador. Esta opção está
disponível no cabeçalho X-Forwarded-For
padrão.
Funções desativadas
As seguintes funções estão desativadas com a diretiva disable_functions
em
php.ini
:
exec
passthru
proc_open
proc_close
shell_exec
show_source
symlink
system
Se precisar de alguma das funções acima, adicione um ficheiro php.ini
na raiz da sua aplicação e altere a diretiva disable_functions
. Em alternativa, defina whitelist_functions
na secção runtime_config
em app.yaml
como uma lista de funções separadas por vírgulas a permitir.
Para a versão 7.3 e anteriores do PHP, a extensão de segurança suhosin é instalada e configurada por predefinição para ser executada no modo de simulação.
O modo de simulação regista a utilização de funções potencialmente perigosas, que são apresentadas na IU do Cloud Logging. A desativação do modo de simulação
faz com que a sua aplicação seja fechada quando é usada uma função potencialmente perigosa.
Para ativar esta funcionalidade de segurança adicional, adicione um php.ini
na raiz do projeto
com a seguinte opção:
; Prevent the use of potentially dangerous functions rather than logging them
suhosin.simulation = Off
Funções corrigidas
A função parse_str
foi corrigida e o segundo parâmetro é obrigatório. Se chamar parse_str
com apenas um parâmetro, é apresentado um aviso e a função não é chamada.
Configurações disponíveis
Pode incluir as seguintes configurações na secção runtime_config
:
Nome | Descrição | Valor predefinido |
---|---|---|
document_root |
Especifica DOCUMENT_ROOT para o nginx e o PHP. Tem de usar um caminho relativo a partir do diretório raiz do projeto.
|
Campo obrigatório |
composer_flags |
Pode substituir algumas das flags do compositor com esta chave. | --no-dev --prefer-dist |
enable_stackdriver_integration |
Suportado apenas para a versão 7.3 e anteriores.
Quando está definida como verdadeira, o tempo de execução ativa automaticamente a integração do Google Cloud Observability. Esta configuração requer o pacote google/cloud v0.33 ou superior.
|
falso |
skip_lockdown_document_root |
Suportado apenas para a versão 7.3 e anteriores.
Por predefinição, o tempo de execução define uma autorização de leitura restrita em todos os ficheiros e diretórios na pasta document_root .
Quando definida como true , o tempo de execução ignora a alteração da autorização.
|
falso |
whitelist_functions |
Suportado apenas para a versão 7.3 e anteriores. Uma lista de nomes de funções separados por vírgulas para permitir. | Uma string vazia |
front_controller_file |
Nome do ficheiro PHP predefinido para o acesso ao diretório. | index.php |
nginx_conf_http_include |
Nome de ficheiro de uma configuração parcial do nginx, que será incluída na secção http no ficheiro de configuração principal do nginx.
|
nginx-http.conf |
nginx_conf_include |
Nome de ficheiro de uma configuração parcial do nginx que será incluída na secção server no ficheiro de configuração principal do nginx.
|
nginx-app.conf |
nginx_conf_override |
Nome do ficheiro de um ficheiro de configuração do nginx fornecido pelo utilizador, que vai ser usado como o ficheiro de configuração principal do nginx. | nginx.conf |
php_fpm_conf_override |
Nome do ficheiro de um ficheiro de configuração php-fpm fornecido pelo utilizador, que será
incluído na parte inferior da secção [app] para que
substitua as configurações existentes.
|
php-fpm.conf |
php_ini_override |
Nome do ficheiro de um ficheiro de configuração PHP fornecido pelo utilizador. | php.ini |
supervisord_conf_addition |
Nome de ficheiro de um ficheiro de configuração do supervisord fornecido pelo utilizador, que será incluído no ficheiro de configuração do supervisord principal. | additional-supervisord.conf |
supervisord_conf_override |
Nome de ficheiro de um ficheiro de configuração do supervisord fornecido pelo utilizador, que substitui o ficheiro de configuração do supervisord principal. | supervisord.conf |
Pode controlar se o Nginx serve ficheiros estáticos para URIs correspondentes definindo a variável de ambiente NGINX_SERVES_STATIC_FILES
na secção build_env_variables
do ficheiro app.yaml
:
runtime: php
env: flex
runtime_config:
document_root: "web"
operating_system: "ubuntu22"
build_env_variables:
NGINX_SERVES_STATIC_FILES: true
Configurar o supervisord no tempo de execução do PHP
O ambiente flexível do App Engine usa o supervisord
para gerir processos. Por predefinição, o supervisord
executa o nginx
e o php-fpm
para executar aplicações Web PHP. No entanto, algumas aplicações têm de executar processos externos. Além disso, por vezes, estas aplicações nem sequer precisam de nginx
nem de php-fpm
.
Se quiser adicionar um processo gerido pelo supervisord
, adicione um ficheiro com o nome
additional-supervisord.conf
ao diretório raiz do projeto. Segue-se um exemplo do conteúdo do ficheiro de configuração para este caso:
Se quiser substituir nginx
e php-fpm
pelo seu processo, adicione um ficheiro com o nome supervisord.conf
ao diretório raiz do projeto. Segue-se um exemplo do conteúdo do ficheiro de configuração para este caso:
Prolongar o tempo de funcionamento
O tempo de execução do PHP do ambiente flexível do App Engine pode ser usado para criar um tempo de execução personalizado. Consulte o artigo Personalizar o tempo de execução do PHP para mais informações.
Variáveis de ambiente
As seguintes variáveis de ambiente são definidas pelo ambiente de tempo de execução:
Variável de ambiente | Descrição |
---|---|
GAE_INSTANCE |
O nome da instância atual. |
GAE_MEMORY_MB |
A quantidade de memória disponível para o processo da aplicação. |
GAE_SERVICE |
O nome do serviço especificado no ficheiro app.yaml
da sua aplicação ou, se não for especificado nenhum nome do serviço, é definido como default . |
GAE_VERSION |
A etiqueta da versão da aplicação atual. |
GOOGLE_CLOUD_PROJECT |
O ID do projeto associado à sua aplicação, que é visível na Google Cloud consola |
PORT |
A porta que vai receber pedidos HTTP. |
Pode definir variáveis de ambiente adicionais com app.yaml
.
Servidor de metadados
Cada instância da sua aplicação pode usar o servidor de metadados do Compute Engine para consultar informações sobre a instância, incluindo o respetivo nome do anfitrião, endereço IP externo, ID da instância, metadados personalizados e informações da conta de serviço. O App Engine não lhe permite definir metadados personalizados para cada instância, mas pode definir metadados personalizados ao nível do projeto e lê-los a partir das suas instâncias do App Engine e Compute Engine.
Esta função de exemplo usa o servidor de metadados para obter o endereço IP externo de uma instância: