Il file php.ini

Puoi includere un file php.ini con la tua applicazione App Engine. Questo file consente di personalizzare il comportamento delle direttive dell'interprete PHP.

Informazioni su php.ini

Il file php.ini deve essere collocato nella directory di base di un'applicazione (la stessa directory del file app.yaml). Viene caricato quando l'interprete PHP viene inizializzato e prima che venga eseguito il codice dell'applicazione.

Il file segue la stessa sintassi degli altri file .ini. Un semplice esempio potrebbe essere:

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

Un elenco delle direttive principali, insieme ai relativi valori di modalità modificabili, è pubblicato su php.net. Le direttive php.ini gestite dalle estensioni sono documentate nelle rispettive pagine delle estensioni stesse.

Puoi sostituire qualsiasi direttiva PHP che abbia uno dei seguenti valori di modalità modificabili:

  • PHP_INI_SYSTEM
  • PHP_INI_ALL
  • PHP_INI_PERDIR

Tieni presente che alcune funzioni sono state disabilitate nell'implementazione di PHP in App Engine. Le direttive che hanno come target queste funzioni non avranno alcun effetto.

È possibile attivare un insieme di estensioni caricabili dinamicamente utilizzando la direttivaextension.

Istruzioni PHP per App Engine

Le seguenti direttive sono specifiche per l'ambiente App Engine. Possono essere inclusi nel file php.ini.

  • google_app_engine.enable_curl_lite - Abilita "cURL lite", una versione di cURL specifica per App Engine integrata, se impostata su "1". "cURL lite" può essere utilizzato esattamente come le funzioni cURL standard, ma sotto il cofano chiama URL Fetch anziché socket, quindi le funzioni senza un equivalente di URL Fetch generano un CurlLiteMethodNotSupportedException.

    Nota: un'app non può attivare contemporaneamente l'estensione "curl.so" e "cURL lite", poiché quest'ultima sovraccarica le funzioni cURL.

  • google_app_engine.enable_functions - Funzioni che sono state disattivate in App Engine, ma che possono essere riattivate utilizzando questa direttiva. Elenca i nomi delle funzioni in una stringa separata da virgole:
    google_app_engine.enable_functions = "phpversion, phpinfo"
  • google_app_engine.allow_include_gs_buckets: consente all'applicazione di utilizzare le istruzioni include o require con i file archiviati in Google Cloud Storage.

    Nota: puoi utilizzare #default# per il bucket predefinito. Questo valore verrà automaticamente sostituito in fase di esecuzione con il nome del bucket predefinito corrente.

    Ad esempio, elenca il bucket predefinito, insieme ai bucket bucket_1 e bucket_2 contenenti i file in una stringa delimitata da virgole:

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

    Puoi anche specificare un bucket e il percorso dei file che possono essere inclusi, ad esempio:

    google_app_engine.allow_include_gs_buckets = "bucket_1/path_x"

    Quando viene eseguito il controllo per stabilire quali file possono essere inclusi da Google Cloud Storage, il percorso fornito viene trattato come un prefisso che deve corrispondere all'inizio del nome del file affinché sia incluso o obbligatorio. Ad esempio, utilizzando l'esempio di percorso riportato sopra, il percorso fornito consentirebbe agli utenti di includere i file da gs://bucket_1/path_x/... perché il prefisso corrisponde, ma non da gs://bucket_1 or gs://bucket_1/path_y/ perché il prefisso non corrisponde.

    Se un file caricato viene spostato in un bucket include consentito, viene generato un avviso per segnalare all'utente un potenziale attacco LFI. In questo caso, ti consigliamo di utilizzare un percorso più restrittivo.

    Nota: il percorso viene trattato come un prefisso di file, pertanto potrebbe includere anche un file specifico, ad esempio 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 - Per impostazione predefinita, le applicazioni PHP non sono autorizzate a scrivere nel filesystem. Se imposti questa direttiva su "1", la limitazione per l'ambiente di sviluppo locale verrà rimossa. Tuttavia, l'impostazione non si applica alle applicazioni in esecuzione in produzione, che sono sempre soggette alle limitazioni della sandbox.