Il file php.ini

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

Informazioni su php.ini

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

Il file segue la stessa sintassi degli altri file .ini. Ecco un esempio semplice:

; 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 istruzioni php.ini gestite dalle estensioni sono documentate nelle rispettive pagine delle estensioni stesse.

Puoi sostituire qualsiasi istruzione 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 istruzioni che hanno come target queste funzioni non avranno alcun effetto.

Un set di estensioni caricabili dinamicamente può essere abilitato utilizzando l'istruzione extension.

Direttive PHP per App Engine

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

  • google_app_engine.enable_curl_lite: abilita "cURL lite", una versione integrata specifica di App Engine di cURL, se impostata su "1". "cURL lite" può essere utilizzato esattamente come faresti con le funzioni cURL standard, ma chiama in background URL Fetch anziché i socket, pertanto le funzioni senza equivalenti di Recupero URL, generano un CurlLiteMethodNotSupportedException.

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

  • google_app_engine.enable_functions: funzioni che sono state disabilitate temporaneamente in App Engine, ma che possono essere riattivate utilizzando questa istruzione. Elenca i nomi delle funzioni in una stringa delimitata 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à sostituito automaticamente in fase di runtime con il nome del bucket predefinito attuale.

    Ad esempio, elenca il bucket predefinito, insieme ai bucket bucket_1 e bucket_2 che contengono 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 individuare i file che possono essere inclusi da Google Cloud Storage, il percorso fornito viene considerato come un prefisso che deve corrispondere all'inizio del nome del file affinché sia incluso o obbligatorio. Ad esempio, utilizzando il percorso di esempio riportato sopra, il percorso fornito consentirebbe agli utenti di includere file da gs://bucket_1/path_x/... perché il prefisso corrisponde, ma non da gs://bucket_1 or gs://bucket_1/path_y/, perché non corrisponde.

    Se un file caricato viene spostato in un bucket di inclusione consentito, viene generato un avviso per avvisare l'utente di un potenziale attacco LFI. In tal caso, ti consigliamo di utilizzare un percorso più restrittivo.

    Nota: il percorso viene considerato come prefisso del file, quindi 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 file system. Se imposti questa istruzione 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 restrizioni della sandbox.