Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Avvertimento
PHP in Windows ha raggiunto la fine del supporto a novembre 2022. PHP è supportato solo per il servizio app in Linux. Questo articolo è solo per riferimento.
Questa guida illustra come configurare le app Web PHP, i back-end per dispositivi mobili e le app per le API nel servizio app di Azure. Vengono illustrate le attività di configurazione più comuni.
Se non si ha familiarità con App Service, seguire prima di tutto il quickstart Creare un'app Web PHP in Azure App Service e l'esercitazione Distribuire un'app PHP, MySQL e Redis in Azure App Service.
Visualizzare la versione di PHP
Per mostrare la versione corrente di PHP, esegui il seguente comando. È possibile usare Azure Cloud Shell:
az webapp config show --resource-group <resource-group-name> --name <app-name> --query phpVersion
Sostituire <resource-group-name>
e <app-name>
con i nomi appropriati per l'app Web.
Annotazioni
Per risolvere uno slot di sviluppo, includere il parametro --slot
seguito dal nome dello slot.
Per visualizzare tutte le versioni di PHP supportate, eseguire il seguente comando:
az webapp list-runtimes --os windows | grep PHP
Questa guida illustra come configurare le app Web PHP, i back-end per dispositivi mobili e le app per le API nel servizio app di Azure. Vengono illustrate le attività di configurazione più comuni.
Se non si ha familiarità con App Service, seguire prima di tutto il quickstart Creare un'app Web PHP in Azure App Service e l'esercitazione Distribuire un'app PHP, MySQL e Redis in Azure App Service.
Visualizzare la versione di PHP
Per mostrare la versione corrente di PHP, esegui il seguente comando. È possibile usare Azure Cloud Shell.
az webapp config show --resource-group <resource-group-name> --name <app-name> --query linuxFxVersion
Sostituire <resource-group-name>
e <app-name>
con i nomi appropriati per l'app Web.
Annotazioni
Per risolvere uno slot di sviluppo, includere il parametro --slot
seguito dal nome dello slot.
Per visualizzare tutte le versioni di PHP supportate, eseguire il seguente comando:
az webapp list-runtimes --os linux | grep PHP
Impostare la versione php
Per impostare la versione di PHP su 8.1, eseguire il seguente comando:
az webapp config set --resource-group <resource-group-name> --name <app-name> --php-version 8.1
Per impostare la versione di PHP su 8.1, eseguire il seguente comando:
az webapp config set --resource-group <resource-group-name> --name <app-name> --linux-fx-version "PHP|8.1"
Cosa accade ai runtime obsoleti nel servizio app?
I runtime obsoleti sono deprecati dall'organizzazione di gestione o hanno rilevato vulnerabilità significative. Di conseguenza, vengono rimossi dalle pagine di creazione e configurazione nel portale. Quando un runtime obsoleto è nascosto dal portale, qualsiasi app che usa ancora tale runtime continua a essere eseguita.
Se si vuole creare un'app con una versione di runtime obsoleta non più visualizzata nel portale, usare l'interfaccia della riga di comando di Azure, il modello arm o Bicep. Queste alternative di distribuzione consentono di creare runtime obsoleti, che sono stati rimossi dal portale, ma sono ancora supportati.
Se un runtime viene rimosso completamente dalla piattaforma del servizio app, il proprietario della sottoscrizione di Azure riceve un avviso di posta elettronica prima della rimozione.
Avvia Composer
Se si vuole che il servizio app esegua Composer in fase di distribuzione, il modo più semplice consiste nell'includere Composer nel repository.
Da una finestra del terminale locale, cambia la directory nella radice del tuo repository. Seguire quindi le istruzioni in Scaricare Composer per scaricare composer.phar
nella directory principale.
Eseguire i comandi seguenti. Per eseguirli, è necessario installare npm .
npm install kuduscript -g
kuduscript --node --scriptType bash --suppressPrompt
La radice del repository include ora due nuovi file: .deployment
e deploy.sh
.
Apri deploy.sh
e trova la sezione Deployment
, che sembra questo esempio:
##################################################################################################################################
# Deployment
# ----------
Alla fine della Deployment
sezione, aggiungere la sezione del codice necessario per eseguire lo strumento richiesto:
# 4. Use composer
echo "$DEPLOYMENT_TARGET"
if [ -e "$DEPLOYMENT_TARGET/composer.json" ]; then
echo "Found composer.json"
pushd "$DEPLOYMENT_TARGET"
php composer.phar install $COMPOSER_ARGS
exitWithMessageOnError "Composer install failed"
popd
fi
Eseguire il commit di tutte le modifiche e distribuire il codice usando Git o usando la distribuzione ZIP con l'automazione della compilazione abilitata. Composer dovrebbe ora essere funzionante come parte dell'automazione della distribuzione.
Eseguire Bower, Gulp o Grunt
Se si vuole che il servizio app esegua gli strumenti di automazione più diffusi in fase di distribuzione, ad esempio Bower, Gulp o Grunt, è necessario fornire uno script di distribuzione personalizzato. Il servizio app esegue questo script quando si esegue la distribuzione usando Git o tramite ZIP deploy con l'automazione della compilazione abilitata.
Per abilitare il repository per eseguire questi strumenti, è necessario aggiungerli alle dipendenze in package.json
. Per esempio:
"dependencies": {
"bower": "^1.7.9",
"grunt": "^1.0.1",
"gulp": "^3.9.1",
...
}
Da una finestra del terminale locale, passare alla directory principale del repository ed eseguire i comandi seguenti. Per eseguirli, è necessario installare npm .
npm install kuduscript -g
kuduscript --node --scriptType bash --suppressPrompt
La radice del repository include ora due nuovi file: .deployment
e deploy.sh
.
Apri deploy.sh
e trova la sezione Deployment
, che sembra questo esempio:
##################################################################################################################################
# Deployment
# ----------
Questa sezione termina con l'esecuzione di npm install --production
.
Alla fine della Deployment
sezione, aggiungere la sezione del codice necessario per eseguire lo strumento richiesto:
Vedere un esempio nell'esempio di MEAN.js, in cui lo script di distribuzione esegue anche un comando personalizzato npm install
.
Pergola
Questo frammento di codice esegue bower install
:
if [ -e "$DEPLOYMENT_TARGET/bower.json" ]; then
cd "$DEPLOYMENT_TARGET"
eval ./node_modules/.bin/bower install
exitWithMessageOnError "bower failed"
cd - > /dev/null
fi
Sorso
Questo frammento di codice esegue gulp imagemin
:
if [ -e "$DEPLOYMENT_TARGET/gulpfile.js" ]; then
cd "$DEPLOYMENT_TARGET"
eval ./node_modules/.bin/gulp imagemin
exitWithMessageOnError "gulp failed"
cd - > /dev/null
fi
Grugnito
Questo frammento di codice esegue grunt
:
if [ -e "$DEPLOYMENT_TARGET/Gruntfile.js" ]; then
cd "$DEPLOYMENT_TARGET"
eval ./node_modules/.bin/grunt
exitWithMessageOnError "Grunt failed"
cd - > /dev/null
fi
Personalizzare l'automazione della compilazione
Se si distribuisce l'app usando Git o usando pacchetti ZIP con l'automazione della compilazione abilitata, l'automazione della compilazione nel servizio app illustra la sequenza seguente:
- Eseguire uno script personalizzato se
PRE_BUILD_SCRIPT_PATH
lo specifica. - Esegui
php composer.phar install
. - Eseguire uno script personalizzato se
POST_BUILD_SCRIPT_PATH
lo specifica.
PRE_BUILD_COMMAND
e POST_BUILD_COMMAND
sono variabili di ambiente vuote per impostazione predefinita. Per eseguire i comandi di precompilazione, definire PRE_BUILD_COMMAND
. Per eseguire comandi post-compilazione, definire POST_BUILD_COMMAND
.
Nell'esempio seguente vengono specificate le due variabili di una serie di comandi, separati da virgole:
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings PRE_BUILD_COMMAND="echo foo, scripts/prebuild.sh"
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings POST_BUILD_COMMAND="echo foo, scripts/postbuild.sh"
Per altre variabili di ambiente per personalizzare l'automazione della compilazione, vedere Configurazione oryx.
Per informazioni su come il servizio app esegue e compila app PHP in Linux, vedere la documentazione di Oryx su come vengono rilevate e compilate le app PHP.
Personalizzare l'avvio
È possibile eseguire un comando personalizzato al momento dell'avvio del contenitore. Eseguire il comando seguente:
az webapp config set --resource-group <resource-group-name> --name <app-name> --startup-file "<custom-command>"
Accedere alle variabili di ambiente
Nel servizio app è possibile impostare le impostazioni dell'app all'esterno del codice dell'app. È quindi possibile accedere a tali impostazioni usando il modello standard getenv()
. Ad esempio, per accedere a un'impostazione dell'app denominata DB_HOST
, usare il codice seguente:
getenv("DB_HOST")
Modificare la radice del sito
Il framework Web di propria scelta potrebbe usare una sottodirectory come radice del sito. Ad esempio, Laravel usa la public/
sottodirectory come radice del sito.
Per personalizzare la radice del sito, impostare il percorso dell'applicazione virtuale per l'app usando il comando az resource update
. L'esempio seguente definisce la radice del sito alla sottodirectory public/
nel repository.
az resource update --name web --resource-group <group-name> --namespace Microsoft.Web --resource-type config --parent sites/<app-name> --set properties.virtualApplications[0].physicalPath="site\wwwroot\public" --api-version 2015-06-01
Per impostazione predefinita, il servizio app di Azure punta il percorso dell'applicazione virtuale radice (/
) alla directory radice dei file dell'applicazione distribuiti (sites\wwwroot
).
Il framework Web di propria scelta potrebbe usare una sottodirectory come radice del sito. Ad esempio, Laravel usa la public/
sottodirectory come radice del sito.
L'immagine predefinita PHP per App Service usa NGINX e la radice del sito può essere modificata configurando il server NGINX con la root
direttiva. Questo file di configurazione di esempio contiene il seguente frammento di codice che modifica la root
direttiva:
server {
#proxy_cache cache;
#proxy_cache_valid 200 1s;
listen 8080;
listen [::]:8080;
root /home/site/wwwroot/public; # Changed for Laravel
location / {
index index.php index.html index.htm hostingstart.html;
try_files $uri $uri/ /index.php?$args; # Changed for Laravel
}
...
Il contenitore predefinito usa il file di configurazione in /etc/nginx/sites-available/default
. Qualsiasi modifica apportata a questo file viene cancellata al riavvio dell'app. Per apportare una modifica effettiva tra i riavvii dell'app, aggiungere un comando di avvio personalizzato come nell'esempio seguente:
cp /home/site/wwwroot/default /etc/nginx/sites-available/default && service nginx reload
Questo comando sostituisce il file di configurazione NGINX predefinito con un file denominato default
nella radice del repository e riavvia NGINX.
Rilevare una sessione HTTPS
Nel servizio app la terminazione TLS/SSL avviene nei servizi di bilanciamento del carico di rete, quindi tutte le richieste HTTPS raggiungono l'app come richieste HTTP non crittografate. Se la logica dell'app deve verificare se le richieste utente sono crittografate, esaminare l'intestazione X-Forwarded-Proto
:
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
// Do something when HTTPS is used
}
I framework Web più diffusi consentono di accedere alle informazioni X-Forwarded-*
nel modello di app standard. In CodeIgniter la funzione is_https() controlla il valore di X_FORWARDED_PROTO
per impostazione predefinita.
Personalizzare le impostazioni di php.ini
Se è necessario apportare modifiche all'installazione di PHP, è possibile modificare una delle direttivephp.ini seguendo questa procedura.
Annotazioni
Il modo migliore per visualizzare la versione php e la configurazione corrente php.ini
consiste nel chiamare phpinfo()
nell'app.
Personalizzare le direttive che non sono PHP_INI_SYSTEM
Per personalizzare le direttive PHP_INI_USER
, PHP_INI_PERDIR
e PHP_INI_ALL
, aggiungere un file .user.ini
alla directory radice dell'app.
Aggiungere le impostazioni di configurazione al .user.ini
file usando la stessa sintassi usata in un php.ini
file. Ad esempio, se si vuole attivare l'impostazione display_errors
e impostare l'impostazione upload_max_filesize
su 10M
, il .user.ini
file conterrà questo testo:
; Example Settings
display_errors=On
upload_max_filesize=10M
; Write errors to d:\home\LogFiles\php_errors.log
; log_errors=On
Ridistribuire l'app con le modifiche e riavviarla.
In alternativa all'uso di un .user.ini
file, puoi usare ini_set()
nella tua app per personalizzare queste direttive nonPHP_INI_SYSTEM
.
Per personalizzare PHP_INI_USER
, PHP_INI_PERDIR
, e le PHP_INI_ALL
direttive per le app Web Linux, ad esempio upload_max_filesize
e expose_php
, usare un file .ini personalizzato. È possibile crearlo in una sessione SSH. Prima di tutto, configurare la directory:
- Accedi al tuo sito Kudu. Per ottenere i valori di hash e area casuali, in Overview copiare Dominio Predefinito nell'app.
- Nel menu in alto selezionare Console di debug, quindi Bash o SSH.
- In Bash o SSH passare alla
/home/site/wwwroot
directory. - Creare una directory denominata
ini
, ad esempiomkdir ini
. - Cambia la directory di lavoro corrente alla cartella
ini
che hai creato.
Quindi, crea un file .ini in cui aggiungi le tue impostazioni. Questo esempio usa extensions.ini
. Non ci sono editor di file come Vi, Vim o Nano, quindi usalo Echo
per aggiungere le impostazioni al file. Modificare il valore upload_max_filesize
da 2M
a 50M
. Usare il comando seguente per aggiungere l'impostazione e creare un extensions.ini
file se non ne esiste già uno:
/home/site/wwwroot/ini>echo "upload_max_filesize=50M" >> extensions.ini
/home/site/wwwroot/ini>cat extensions.ini
upload_max_filesize=50M
/home/site/wwwroot/ini>
Nel portale di Azure aggiungere un'impostazione dell'applicazione per analizzare la ini
directory appena creata per applicare la modifica per upload_max_filesize
:
- Passare al portale di Azure e selezionare l'applicazione PHP Linux del servizio app.
- Passare a Impostazioni>Variabili d'ambiente.
- Seleziona + Aggiungi.
- In Nome immettere PHP_INI_SCAN_DIR e per Valore immettere
:/home/site/wwwroot/ini
. - Selezionare Applica, quindi di nuovo Applica . Confermare le modifiche.
Annotazioni
Se è stata ricompilata un'estensione PHP, ad esempio GD, seguire la procedura descritta in Ricompilazione delle estensioni PHP.
Personalizzare le direttive PHP_INI_SYSTEM
Per personalizzare PHP_INI_SYSTEM
le direttive, utilizzare l'impostazione dell'app PHP_INI_SCAN_DIR
.
Innanzitutto, esegui il seguente comando per aggiungere un'impostazione dell'app chiamata PHP_INI_SCAN_DIR
:
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings PHP_INI_SCAN_DIR="d:\home\site\ini"
Nel portale di Azure selezionare l'app. In Strumenti di sviluppo nel menu della barra laterale, seleziona Strumenti avanzati, quindi vai a d:\home\site
Utilizzo di SSH.
Creare una directory in d:\home\site
denominata ini
. Quindi, creare un file .ini nella directory d:\home\site\ini
, ad esempio settings.ini
, con le direttive che si desidera personalizzare. Usare la stessa sintassi usata in un php.ini
file.
Ad esempio, per modificare il valore di expose_php
, eseguire i comandi seguenti:
cd /home/site
mkdir ini
echo "expose_php = Off" >> ini/setting.ini
Per rendere effettive le modifiche, riavviare l'app.
Per personalizzare le direttive PHP_INI_SYSTEM
, non è possibile utilizzare l'approccio .htaccess. Il *App Service* utilizza un meccanismo separato che usa l'impostazione dell'app PHP_INI_SCAN_DIR
.
Innanzitutto, esegui il seguente comando per aggiungere un'impostazione dell'app chiamata PHP_INI_SCAN_DIR
:
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings PHP_INI_SCAN_DIR="/usr/local/etc/php/conf.d:/home/site/ini"
Il valore /usr/local/etc/php/conf.d
è la directory predefinita in cui php.ini
esiste. Il valore /home/site/ini
è la directory personalizzata in cui si aggiunge un file personalizzato di.ini. Separare i valori con due punti (:
).
Passare alla sessione SSH Web con il contenitore Linux.
Creare una directory in /home/site
denominata ini
. Quindi, creare un file .ini nella directory /home/site/ini
, ad esempio settings.ini
, con le direttive che si desidera personalizzare. Usare la stessa sintassi usata in un php.ini
file.
Suggerimento
I contenitori Linux predefiniti nel servizio app usano /home
come risorsa di archiviazione condivisa persistente.
Ad esempio, per modificare il valore di expose_php
, eseguire i comandi seguenti:
cd /home/site
mkdir ini
echo "expose_php = Off" >> ini/setting.ini
Per rendere effettive le modifiche, riavviare l'app.
Abilitare le estensioni PHP
Le installazioni PHP predefinite contengono le estensioni più usate. È possibile abilitare più estensioni nello stesso modo in cui si personalizzano le direttive php.ini.
Annotazioni
Il modo migliore per visualizzare la versione php e la configurazione corrente php.ini
consiste nel chiamare phpinfo()
nell'app.
Per abilitare altre estensioni, seguire questa procedura:
Aggiungi una
bin
directory alla directory principale dell'app e inseriscivi i file di estensione.dll , ad esempiomongodb.dll
. Assicurarsi che le estensioni siano compatibili con la versione PHP in Azure e che siano compatibili con VC9 e non thread-safe (NTS).Distribuire le modifiche.
Seguire la procedura descritta in Personalizzare le direttive PHP_INI_SYSTEM e aggiungere le estensioni nel file di .ini personalizzato con l'estensione o la direttiva zend_extension:
extension=d:\home\site\wwwroot\bin\mongodb.dll zend_extension=d:\home\site\wwwroot\bin\xdebug.dll
Per rendere effettive le modifiche, riavviare l'app.
Le installazioni PHP predefinite contengono le estensioni più usate. È possibile abilitare più estensioni nello stesso modo in cui si personalizzano le direttive php.ini.
Annotazioni
Il modo migliore per visualizzare la versione php e la configurazione corrente php.ini
consiste nel chiamare phpinfo()
nell'app.
Per abilitare altre estensioni, seguire questa procedura:
Aggiungi una
bin
directory alla directory principale dell'app e inseriscivi i file con estensione .so (ad esempio,mongodb.so
). Assicurarsi che le estensioni siano compatibili con la versione PHP in Azure e che siano compatibili con VC9 e non thread-safe (NTS).Distribuire le modifiche.
Seguire la procedura descritta in Personalizzare le direttive PHP_INI_SYSTEM e aggiungere le estensioni nel file di .ini personalizzato con l'estensione o la direttiva zend_extension:
extension=/home/site/wwwroot/bin/mongodb.so zend_extension=/home/site/wwwroot/bin/xdebug.so
Per rendere effettive le modifiche, riavviare l'app.
Accedere ai log di diagnostica
Usare lo strumento standard error_log()
per visualizzare i log di diagnostica nel servizio app di Azure.
Per accedere ai log della console generati dall'interno del codice dell'applicazione nel servizio app, attivare la registrazione diagnostica eseguendo il comando seguente in Cloud Shell:
az webapp log config --resource-group <resource-group-name> --name <app-name> --docker-container-logging filesystem --level Verbose
I valori possibili per --level
sono Error
, Warning
, Info
e Verbose
. Ogni livello successivo include il livello precedente. Ad esempio, Error
include solo messaggi di errore.
Verbose
include tutti i messaggi.
Dopo aver attivato la registrazione diagnostica, eseguire il comando seguente per visualizzare il flusso di log:
az webapp log tail --resource-group <resource-group-name> --name <app-name>
Se i log della console non vengono visualizzati immediatamente, controllare di nuovo in 30 secondi.
Per arrestare lo streaming dei log in qualsiasi momento, selezionare CTRL+C.
È possibile accedere ai log della console generati dall'interno del contenitore.
Per attivare la registrazione dei contenitori, eseguire il comando seguente:
az webapp log config --name <app-name> --resource-group <resource-group-name> --docker-container-logging filesystem
Sostituire <app-name>
e <resource-group-name>
con i nomi appropriati per l'app Web.
Dopo aver attivato la registrazione dei contenitori, eseguire il comando seguente per visualizzare il flusso di log:
az webapp log tail --name <app-name> --resource-group <resource-group-name>
Se i log della console non vengono visualizzati immediatamente, controllare di nuovo in 30 secondi.
Per arrestare lo streaming dei log in qualsiasi momento, selezionare CTRL+C.
Risoluzione dei Problemi
Quando un'app PHP funzionante si comporta in modo diverso nel servizio app o presenta errori, provare le soluzioni seguenti:
- Accedi al flusso del registro diagnostico.
- Testare l'app in locale in modalità di produzione. Il servizio app esegue l'app in modalità di produzione, quindi è necessario assicurarsi che il progetto funzioni come previsto in modalità di produzione in locale. Per esempio:
- A seconda del file
composer.json
, è possibile installare pacchetti diversi per la modalità di produzione (require
rispetto arequire-dev
). - Alcuni framework Web potrebbero distribuire file statici in modo diverso in modalità di produzione.
- Alcuni framework Web potrebbero usare script di avvio personalizzati durante l'esecuzione in modalità di produzione.
- A seconda del file
- Eseguire l'app nel servizio app in modalità di debug. Ad esempio, in Laravel è possibile configurare l'app per l'output dei messaggi di debug nell'ambiente di produzione impostando l'impostazione dell'app
APP_DEBUG
sutrue
.
Ignorare il messaggio robots933456 nei log
Nei log del contenitore potrebbe essere visualizzato il messaggio seguente:
2019-04-08T14:07:56.641002476Z "-" - - [08/Apr/2019:14:07:56 +0000] "GET /robots933456.txt HTTP/1.1" 404 415 "-" "-"
Questo messaggio può tranquillamente essere ignorato.
/robots933456.txt
è un percorso URL fittizio usato dal servizio app per verificare se il contenitore è in grado di gestire le richieste. Una risposta 404 indica che il percorso non esiste e segnala al servizio app che il contenitore è integro e pronto per rispondere alle richieste.