php.ini 文件

您可以在 App Engine 应用中加入 php.ini 文件。该文件让您可以自定义 PHP 解析器指令的行为。

关于 php.ini

php.ini 文件应放置在应用的基本目录中(与 app.yaml 文件位于同一目录中)。在初始化 PHP 解释器之前系统会加载此文件,然后才运行应用代码。

该文件遵循与其他 .ini 文件相同的语法。下面是一个简单示例:

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

php.net 上发布了一系列核心指令及其可更改的模式值。扩展程序处理的 php.ini 指令记录在扩展程序各自的页面上。

您可以替换具有以下任一可更改模式值的任意 PHP 指令:

  • PHP_INI_SYSTEM
  • PHP_INI_ALL
  • PHP_INI_PERDIR

请注意,App Engine 的 PHP 实现中已停用某些函数。指向这些函数的指令将不起作用。

您可以使用 extension 指令启用一组可动态加载的扩展程序

App Engine 的 PHP 指令

以下指令仅适用于 App Engine 环境。您可以在 php.ini 文件中加入这些指令。

  • google_app_engine.enable_curl_lite - 该指令设置为“1”时,启用仅适用于 App Engine 的内置 cURL 版本“cURL lite”。您可以像使用标准 cURL 函数一样使用“cURL lite”,但该版本会在后台调用网址提取(而非套接字),因此对于不具有网址提取等效方法的函数,系统将抛出 CurlLiteMethodNotSupportedException

    注意:应用无法同时启用“curl.so”扩展程序和“cURL lite”,因为后者会重载 cURL 函数。

  • google_app_engine.enable_functions - 已在 App Engine 中软停用但可使用此指令重新启用的函数。函数名称将在以逗号分隔的字符串中列出:
    google_app_engine.enable_functions = "phpversion, phpinfo"
  • google_app_engine.allow_include_gs_buckets - 允许您的应用将 includerequire 语句与存储在 Google Cloud Storage 中的文件搭配使用

    注意:您可以将 #default# 用作默认存储分区;此值将在运行时自动替换为您当前的默认存储分区名称。

    例如,您可在以逗号分隔的列表中列出默认存储分区和包含文件的存储分区 bucket_1bucket_2

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

    您还可以指定存储分区和可以包含的文件路径,例如:

    google_app_engine.allow_include_gs_buckets = "bucket_1/path_x"

    系统在检查可以包含 GCS 中的哪些文件时,会将提供的路径视为前缀;文件名的开头必须与该前缀匹配,才能包含 (include) 或需要 (require) 相应文件。例如,使用以上的路径示例,提供的路径允许用户包含 gs://bucket_1/path_x/... 中的文件,因为其前缀匹配。但不包含 gs://bucket_1 or gs://bucket_1/path_y/ 中的文件,因为其前缀不匹配。

    如果将上传的文件移动到允许的包含分区,则系统会生成一条警告,提醒用户可能存在 LFI 攻击。如果发生这种情况,您应该考虑使用更具限制性的路径。

    注意:该路径被视为文件前缀;也可以包含特定文件,例如 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 - 默认情况下,PHP 应用无权写入文件系统。将此指令设置为“1”可在本地开发环境中解除此限制。 但该设置不影响在生产环境中运行的应用,此类应用始终受沙盒限制的约束。