Arquivo php.ini

Você pode incluir um arquivo php.ini com seu aplicativo do App Engine. Com esse arquivo, é possível personalizar o comportamento das diretivas de interpretação do PHP.

Sobre o php.ini

O arquivo php.ini precisa ser colocado no diretório base de um aplicativo (o mesmo diretório do arquivo app.yaml). Ele é carregado quando o interpretador do PHP é inicializado e antes do código do aplicativo ser executado.

O arquivo tem a mesma sintaxe de outros arquivos .ini. Veja abaixo um exemplo simples:

; This is a simple php.ini file on App Engine
;
; This is a directive set to "On"
widget_compression = "On"

Uma lista das diretivas principais, com os valores de modo alteráveis, é publicada no php.net. As diretivas php.ini processadas pelas extensões são documentadas nas respectivas páginas das próprias extensões.

É possível substituir qualquer diretiva PHP com um dos seguintes valores de modo alteráveis:

  • PHP_INI_SYSTEM
  • PHP_INI_ALL
  • PHP_INI_PERDIR

Observe que algumas funções foram desativadas na implementação do PHP no App Engine. Diretivas que visam essas funções não terão efeito.

Um conjunto de extensões carregáveis dinamicamente pode ser ativado usando a diretiva extension.

Diretivas PHP para o App Engine

As diretivas a seguir são específicas para o ambiente do App Engine. É possível incluí-las no arquivo php.ini.

  • google_app_engine.enable_curl_lite: ativa "cURL lite", uma versão incorporada específica do App Engine do cURL, quando definida como "1". "cURL lite" pode ser usada exatamente como você usaria as funções cURL padrão, mas chama Busca de URL em segundo plano em vez de soquetes. Assim, para funções sem equivalente de Busca de URL, gere um CurlLiteMethodNotSupportedException.

    Observação: não é possível ativar simultaneamente a extensão "curl.so" e o "cURL lite" porque este último sobrecarrega as funções cURL.

  • google_app_engine.enable_functions: funções que foram desativadas temporariamente no App Engine, mas podem ser reativadas usando essa diretiva. Ordene os nomes das funções em uma string separada por vírgulas:
    google_app_engine.enable_functions = "phpversion, phpinfo"
  • google_app_engine.allow_include_gs_buckets: permite que o aplicativo use as instruções include ou require com arquivos armazenados no Google Cloud Storage.

    Observação: o #default# pode ser usado para o bucket padrão. Esse valor será substituído automaticamente no ambiente de execução pelo nome do bucket padrão atual.

    Por exemplo, liste o bucket padrão com os buckets bucket_1 e bucket_2 que contêm os arquivos em uma string delimitada por vírgula:

    google_app_engine.allow_include_gs_buckets = "#default#, bucket_1, bucket_2"

    Também é possível especificar um bucket e um caminho para os arquivos que podem ser incluídos. Por exemplo:

    google_app_engine.allow_include_gs_buckets = "bucket_1/path_x"

    Quando a verificação é executada para quais arquivos podem ser incluídos do Google Cloud Storage, o caminho informado é tratado como um prefixo que precisa corresponder ao início do nome de arquivo para que este seja incluído ou necessário. Por exemplo, usando o exemplo de caminho acima, o caminho fornecido pode permitir que os usuários incluam arquivos de gs://bucket_1/path_x/... porque o prefixo corresponde, mas não de gs://bucket_1 or gs://bucket_1/path_y/ porque o prefixo não corresponde.

    Se um arquivo enviado for movido para um bucket de inclusão permitido, um aviso será gerado para alertar o usuário sobre um possível ataque de LFI. Se isso acontecer, pense em usar um caminho mais restritivo.

    Observação: o caminho é tratado como um prefixo de arquivo e, por isso, também pode incluir um arquivo específico. Por exemplo, google_app_engine.allow_include_gs_buckets = "bucket_1/path_x.ext", "bucket_2/path_z/some_file.ext.

  • google_app_engine.disable_readonly_filesystem: por padrão, aplicativos PHP não podem gravar no sistema de arquivos. Se a diretiva for definida como "1", a restrição será removida para o ambiente de desenvolvimento local. No entanto, a configuração não se aplica a aplicativos em execução na produção, que estão sempre sujeitos às restrições de sandbox.