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

請注意,某些功能已在 PHP 的 App Engine 實作中停用。以這些功能為目標的指令不會產生任何作用。

extension 指令可用來啟用一組 可動態載入的擴充功能

App Engine 的 PHP 指令

下列指令專屬於 App Engine 環境,並且可包含在 php.ini 檔案中。

  • google_app_engine.enable_curl_lite:設為「1」時即會啟用「cURL 精簡版」,這是 App Engine 專屬的內建 cURL 版本。「cURL 精簡版」的使用方式與標準版 cURL 函式完全相同,但精簡版不會呼叫通訊端,而是在背景中呼叫網址擷取。因此,沒有網址擷取對等項目的函式會傳回 CurlLiteMethodNotSupportedException

    注意事項:應用程式無法同時啟用「curl.so」擴充功能和「cURL 精簡版」,因為後者會導致 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"

    系統在檢查會從 Google Cloud Storage 納入哪些檔案時,會將提供的路徑視為前置字串;此前置字串必須符合檔案名稱的開頭,才能納入或要求該檔案。舉例來說,以上述路徑範例為例,提供的路徑可讓使用者納入來自 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」會解除本機開發環境的限制。 不過,這項設定不會套用至在實際工作環境中運作的應用程式,因為這類應用程式均須符合沙箱限制