El archivo php.ini

Puedes incluir un archivo php.ini a tu aplicación de App Engine. Este archivo te permite personalizar el comportamiento de las directivas de intérprete de PHP.

Acerca de php.ini

El archivo php.ini debe almacenarse en el directorio base de una aplicación (el mismo directorio que el archivo app.yaml). Se carga cuando se inicializa el intérprete de PHP, antes de ejecutar el código de tu aplicación.

El archivo tiene la misma sintaxis que otros archivos .ini. Un ejemplo simple puede verse así:

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

Una lista de las directivas principales se publica en php.net junto con sus valores de modo modificables. Las directivas php.ini controladas por extensiones se documentan en las respectivas páginas de las mismas extensiones.

Puedes anular cualquier directiva de PHP que contenga uno de los siguientes valores de modo modificables:

  • PHP_INI_SYSTEM
  • PHP_INI_ALL
  • PHP_INI_PERDIR

Ten en cuenta que algunas funciones se inhabilitaron en la implementación de PHP en App Engine. Las directivas que se orientan a estas funciones no tendrán ningún efecto.

Se puede habilitar un conjunto de extensiones de carga dinámica con la directiva extension.

Directivas de PHP para App Engine

Las siguientes directivas son específicas para el entorno de App Engine. Pueden estar incluidas en el archivo php.ini.

  • google_app_engine.enable_curl_lite: Habilita “cURL lite”, una versión de cURL integrada, específica de App Engine, cuando se establece en “1”. “cURL lite” se puede usar tal como usarías las funciones cURL, pero llama a la recuperación de URL de forma interna en lugar de sockets, por lo tanto, las funciones sin recuperación de URL equivalente arrojarán un CurlLiteMethodNotSupportedException.

    Nota: Una aplicación no puede habilitar la extensión “curl.so” y “cURL lite” al mismo tiempo, dado que la última sobrecarga las funciones cURL.

  • google_app_engine.enable_functions: Funciones que se inhabilitaron por software en App Engine, pero que se pueden volver a habilitar con esta directiva. Genera una lista con los nombres de las funciones en una string delimitada por comas:
    google_app_engine.enable_functions = "phpversion, phpinfo"
  • google_app_engine.allow_include_gs_buckets: Permite que tu aplicación use las instrucciones include o require con archivos almacenados en Google Cloud Storage.

    Nota: Puedes usar #default# para el depósito predeterminado; este valor se reemplaza de forma automática en el entorno de ejecución con tu nombre de depósito predeterminado actual.

    Por ejemplo, genera una lista de depósitos predeterminados, junto con los depósitos bucket_1 y bucket_2 que contengan los archivos en una string delimitada por comas:

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

    También puedes especificar un bucket y una ruta para los archivos que pueden estar incluidos, por ejemplo:

    google_app_engine.allow_include_gs_buckets = "bucket_1/path_x"

    Cuando se realiza la verificación de los archivos que se pueden incluir de Google Cloud Storage, se trata a la ruta suministrada como un prefijo que debe coincidir con el comienzo del nombre del archivo para que se lo incluya o requiera. Por ejemplo, con la ruta del ejemplo anterior, la ruta proporcionada debería permitir a los usuarios incluir los archivos de gs://bucket_1/path_x/... ya que el prefijo coincide, pero no de gs://bucket_1 or gs://bucket_1/path_y/, porque no coincide.

    Si se transfirió un archivo subido a un depósito de inclusión permitido, se genera una advertencia para alertar al usuario de un posible ataque LFI. Si esto sucede, debes considerar usar una ruta de acceso más restringida.

    Nota: Se trata a la ruta como un prefijo de archivo, de modo que pueda incluir también un archivo específico, por ejemplo, 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: De forma predeterminada, no se permite a las aplicaciones de PHP escribir en el sistema de archivos. Configurar esta directiva en “1” levantará la restricción del entorno de programación local. Sin embargo, la configuración no afecta a las aplicaciones que se están ejecutando en producción, que siempre están sujetas a las restricciones en la zona de pruebas.