Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Avertissement
PHP sur Windows a atteint la fin du support en novembre 2022. PHP est pris en charge uniquement pour App Service sur Linux. Cet article est destiné à des fins de référence uniquement.
Ce guide vous montre comment configurer vos applications web PHP, vos back-ends mobiles et vos applications API dans Azure App Service. Les tâches de configuration les plus courantes sont couvertes.
Si vous débutez avec App Service, vous devez d’abord suivre le guide de démarrage rapide Créer une application web PHP dans Azure App Service et déployer une application PHP, MySQL et Redis dans azure App Service .
Afficher la version PHP
Pour afficher la version actuelle de PHP, exécutez la commande suivante. Vous pouvez utiliser Azure Cloud Shell :
az webapp config show --resource-group <resource-group-name> --name <app-name> --query phpVersion
Remplacez <resource-group-name>
et <app-name>
par des noms appropriés pour votre application web.
Remarque
Pour traiter un emplacement de développement, incluez le paramètre --slot
suivi du nom de l’emplacement.
Pour afficher toutes les versions de PHP prises en charge, exécutez la commande suivante :
az webapp list-runtimes --os windows | grep PHP
Ce guide vous montre comment configurer vos applications web PHP, vos back-ends mobiles et vos applications API dans Azure App Service. Les tâches de configuration les plus courantes sont couvertes.
Si vous débutez avec App Service, vous devez d’abord suivre le guide de démarrage rapide Créer une application web PHP dans Azure App Service et déployer une application PHP, MySQL et Redis dans azure App Service .
Afficher la version PHP
Pour afficher la version actuelle de PHP, exécutez la commande suivante. Vous pouvez utiliser Azure Cloud Shell.
az webapp config show --resource-group <resource-group-name> --name <app-name> --query linuxFxVersion
Remplacez <resource-group-name>
et <app-name>
par des noms appropriés pour votre application web.
Remarque
Pour traiter un emplacement de développement, incluez le paramètre --slot
suivi du nom de l’emplacement.
Pour afficher toutes les versions de PHP prises en charge, exécutez la commande suivante :
az webapp list-runtimes --os linux | grep PHP
Définir la version PHP
Pour définir la version PHP sur 8.1, exécutez la commande suivante :
az webapp config set --resource-group <resource-group-name> --name <app-name> --php-version 8.1
Pour définir la version PHP sur 8.1, exécutez la commande suivante :
az webapp config set --resource-group <resource-group-name> --name <app-name> --linux-fx-version "PHP|8.1"
Que se passe-t-il pour les runtimes obsolètes dans App Service ?
Les runtimes obsolètes sont déconseillés par l'organisation responsable de la maintenance ou présentent des vulnérabilités majeures. En conséquence, ils sont supprimés de la création et de la configuration des pages dans le portail. Lorsqu’un runtime obsolète est masqué dans le portail, toute application qui utilise toujours ce runtime continue à s’exécuter.
Si vous souhaitez créer une application avec une version d’exécution obsolète qui n’est plus affichée sur le portail, utilisez l’interface de ligne de commande Azure, le modèle ARM ou Bicep. Ces alternatives de déploiement vous permettent de créer des environnements d'exécution déconseillés qui ont été retirés du portail, mais qui bénéficient encore d'un support.
Si un runtime est entièrement supprimé de la plateforme App Service, le propriétaire de votre abonnement Azure reçoit un e-mail avant la suppression.
Exécuter Composer
Si vous souhaitez qu’App Service exécute Composer au moment du déploiement, le moyen le plus simple consiste à inclure Composer dans votre référentiel.
À partir d’une fenêtre de terminal local, remplacez le répertoire par la racine de votre référentiel. Ensuite, suivez les instructions de Download Composer pour télécharger composer.phar
vers la racine du répertoire.
Exécutez les commandes suivantes. Pour les exécuter, vous avez besoin de npm installé.
npm install kuduscript -g
kuduscript --node --scriptType bash --suppressPrompt
La racine de votre dépôt comporte désormais deux nouveaux fichiers : .deployment
et deploy.sh
.
Ouvrez deploy.sh
et recherchez la section Deployment
, qui ressemble à cet exemple :
##################################################################################################################################
# Deployment
# ----------
À la fin de la Deployment
section, ajoutez la section de code dont vous avez besoin pour exécuter l’outil requis :
# 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
Validez toutes vos modifications et déployez votre code à l’aide de Git ou à l’aide du déploiement ZIP avec l’automatisation de build activée. Composer doit maintenant s’exécuter dans le cadre de l’automatisation du déploiement.
Run Bower, Gulp ou Grunt
Si vous souhaitez qu’App Service exécute des outils d’automatisation populaires au moment du déploiement, tels que Bower, Gulp ou Grunt, vous devez fournir un script de déploiement personnalisé. App Service exécute ce script lorsque vous déployez à l’aide de Git ou à l’aide du déploiement ZIP avec l’automatisation de build activée.
Pour permettre à votre référentiel d’exécuter ces outils, vous devez les ajouter aux dépendances dans package.json
. Par exemple:
"dependencies": {
"bower": "^1.7.9",
"grunt": "^1.0.1",
"gulp": "^3.9.1",
...
}
À partir d’une fenêtre de terminal local, remplacez le répertoire par la racine de votre référentiel et exécutez les commandes suivantes. Pour les exécuter, vous avez besoin de npm installé.
npm install kuduscript -g
kuduscript --node --scriptType bash --suppressPrompt
La racine de votre dépôt comporte désormais deux nouveaux fichiers : .deployment
et deploy.sh
.
Ouvrez deploy.sh
et recherchez la section Deployment
, qui ressemble à cet exemple :
##################################################################################################################################
# Deployment
# ----------
Cette section se termine par l’exécution de npm install --production
.
À la fin de la Deployment
section, ajoutez la section de code dont vous avez besoin pour exécuter l’outil requis :
Consultez un exemple dans l’échantillon MEAN.js, où le script de déploiement exécute également une commande npm install
personnalisée.
Charmille
Cet extrait de code exécute 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
Gorgée
Cet extrait de code exécute 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
Grogner
Cet extrait de code exécute grunt
:
if [ -e "$DEPLOYMENT_TARGET/Gruntfile.js" ]; then
cd "$DEPLOYMENT_TARGET"
eval ./node_modules/.bin/grunt
exitWithMessageOnError "Grunt failed"
cd - > /dev/null
fi
Personnaliser l’automatisation de la construction
Si vous déployez votre application à l’aide de Git ou en utilisant des packages ZIP avec l’automatisation de build activée, l’automatisation de build dans App Service effectue les étapes de la séquence suivante :
- Exécutez un script personnalisé si
PRE_BUILD_SCRIPT_PATH
le spécifie. - Exécutez
php composer.phar install
. - Exécutez un script personnalisé si
POST_BUILD_SCRIPT_PATH
le spécifie.
PRE_BUILD_COMMAND
et POST_BUILD_COMMAND
sont des variables d’environnement qui sont vides par défaut. Pour exécuter des commandes de prébuild, définissez PRE_BUILD_COMMAND
. Pour exécuter des commandes post-build, définissez POST_BUILD_COMMAND
.
L’exemple suivant spécifie les deux variables à une série de commandes, séparées par des virgules :
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"
Pour connaître d’autres variables d’environnement permettant de personnaliser l’automatisation de la génération, consultez Configuration d’Oryx.
Pour en savoir plus sur la façon dont App Service exécute et génère des applications PHP sous Linux, consultez la documentation Oryx sur la façon dont les applications PHP sont détectées et créées.
Personnaliser le démarrage
Vous pouvez exécuter une commande personnalisée au moment du démarrage du conteneur. Exécutez la commande suivante:
az webapp config set --resource-group <resource-group-name> --name <app-name> --startup-file "<custom-command>"
Accéder aux variables d’environnement
Dans App Service, vous pouvez définir les paramètres d’application en dehors de votre code d’application. Vous pouvez ensuite accéder à ces paramètres à l’aide du modèle standard getenv()
. Par exemple, pour accéder à un paramètre d’application nommé DB_HOST
, utilisez le code suivant :
getenv("DB_HOST")
Modifier la racine du site
L’infrastructure web de votre choix peut utiliser un sous-répertoire comme racine du site. Par exemple, Laravel utilise le public/
sous-répertoire comme racine du site.
Pour personnaliser la racine du site, définissez le chemin d’accès de l’application virtuelle pour l’application à l’aide de la commande az resource update
. L’exemple suivant définit la racine du site sur le public/
sous-répertoire de votre référentiel :
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
Par défaut, Azure App Service pointe le chemin d’accès de l’application virtuelle racine (/
) vers le répertoire racine des fichiers d’application déployés (sites\wwwroot
).
L’infrastructure web de votre choix peut utiliser un sous-répertoire comme racine du site. Par exemple, Laravel utilise le public/
sous-répertoire comme racine du site.
L’image PHP par défaut pour App Service utilise NGINX et vous modifiez la racine du site en configurant le serveur NGINX avec la root
directive. Cet exemple de fichier de configuration contient l’extrait de code suivant qui modifie la root
directive :
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
}
...
Le conteneur par défaut utilise le fichier de configuration à l’adresse /etc/nginx/sites-available/default
. Toute modification que vous apportez à ce fichier est effacée lorsque l’application redémarre. Pour apporter une modification efficace dans les redémarrages d’applications, ajoutez une commande de démarrage personnalisée comme cet exemple :
cp /home/site/wwwroot/default /etc/nginx/sites-available/default && service nginx reload
Cette commande remplace le fichier de configuration NGINX par défaut par un fichier nommé default
à la racine de votre référentiel, et redémarre NGINX.
Détecter une session HTTPS
Dans App Service, une terminaison TLS/SSL se produit au niveau des équilibreurs de charge réseau. Toutes les requêtes HTTPS accèdent donc à votre application en tant que requêtes HTTP non chiffrées. Si votre logique d’application doit vérifier si les demandes utilisateur sont chiffrées, inspectez l’en-tête X-Forwarded-Proto
:
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
// Do something when HTTPS is used
}
Les frameworks web populaires vous permettent d’accéder aux informations X-Forwarded-*
dans votre modèle d’application standard. Dans CodeIgniter, la fonction is_https() vérifie par défaut la valeur de X_FORWARDED_PROTO
.
Personnaliser les paramètres php.ini
Si vous avez besoin d’apporter des modifications à votre installation PHP, vous pouvez modifier l’une des directivesphp.ini en procédant comme suit.
Remarque
La meilleure façon de voir la version PHP et la configuration actuelle php.ini
consiste à appeler phpinfo()
dans votre application.
Personnaliser les directives non-PHP_INI_SYSTEM
Pour personnaliser PHP_INI_USER
, PHP_INI_PERDIR
et PHP_INI_ALL
directives, ajoutez un .user.ini
fichier au répertoire racine de votre application.
Ajoutez des paramètres de configuration au .user.ini
fichier à l’aide de la même syntaxe que celle utilisée dans un php.ini
fichier. Par exemple, si vous souhaitez activer le paramètre display_errors
et régler le paramètre upload_max_filesize
sur 10M
, votre fichier .user.ini
contient ce texte :
; Example Settings
display_errors=On
upload_max_filesize=10M
; Write errors to d:\home\LogFiles\php_errors.log
; log_errors=On
Redéployez votre application avec les modifications et redémarrez-la.
Au lieu d'utiliser un fichier .user.ini
, vous pouvez utiliser ini_set()
dans votre application pour personnaliser ces directives non-PHP_INI_SYSTEM
.
Pour personnaliser les directives PHP_INI_USER
, PHP_INI_PERDIR
et PHP_INI_ALL
pour les applications Web Linux, telles que upload_max_filesize
et expose_php
, utilisez un fichier .ini personnalisé. Vous pouvez le créer dans une session SSH. Tout d’abord, configurez le répertoire :
- Accédez à votre site Kudu. Pour obtenir les valeurs de hachage et de région aléatoires, dans votre application Vue d’ensemble, copiez le domaine par défaut.
- Dans le menu supérieur, sélectionnez Déboguer la console, puis Bash ou SSH.
- Dans Bash ou SSH, accédez à votre
/home/site/wwwroot
répertoire. - Créez un répertoire appelé
ini
(par exemple,mkdir ini
). - Remplacez le répertoire de travail actuel par le
ini
dossier que vous avez créé.
Ensuite, créez un fichier .ini dans lequel vous ajoutez vos paramètres. Cet exemple utilise extensions.ini
. Il n’y a pas d’éditeurs de fichiers tels que Vi, Vim ou Nano, alors utilisez-le Echo
pour ajouter les paramètres au fichier. Modifiez la valeur upload_max_filesize
de 2M
à 50M
. Utilisez la commande suivante pour ajouter le paramètre et créer un extensions.ini
fichier s’il n’existe pas encore :
/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>
Dans le Portail Azure, ajoutez un paramètre d’application pour analyser le répertoire ini
que vous venez de créer pour appliquer la modification de upload_max_filesize
:
- Accédez au portail Azure et sélectionnez votre application PHP Linux App Service.
- Accédez à paramètres>variables d’environnement.
- Sélectionnez + Ajouter.
- Pour Nom , entrez PHP_INI_SCAN_DIR et pour Valeur, entrez
:/home/site/wwwroot/ini
. - Sélectionnez Appliquer, puis Appliquez à nouveau. Confirmez vos modifications.
Remarque
Si vous recompilez une extension PHP, telle que GD, suivez les étapes de recompilation des extensions PHP.
Personnaliser les directives PHP_INI_SYSTEM
Pour personnaliser les PHP_INI_SYSTEM
directives, utilisez le paramètre d’application PHP_INI_SCAN_DIR
.
Tout d’abord, exécutez la commande suivante pour ajouter un paramètre d’application appelé 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"
Dans le portail Azure, sélectionnez votre application. Sous Outils de développement dans le menu latéral, sélectionnez Outils avancés, puis passez à l’utilisation de d:\home\site
SSH.
Créez un répertoire dans d:\home\site
appelé ini
. Ensuite, créez un fichier .ini dans le d:\home\site\ini
répertoire, par exemple, settings.ini
, avec les directives que vous souhaitez personnaliser. Utilisez la même syntaxe que celle que vous utiliseriez dans un php.ini
fichier.
Par exemple, pour modifier la valeur de expose_php
, exécutez les commandes suivantes :
cd /home/site
mkdir ini
echo "expose_php = Off" >> ini/setting.ini
Pour que les modifications prennent effet, redémarrez l’application.
Pour personnaliser les directives PHP_INI_SYSTEM
, vous ne pouvez pas utiliser l’approche .htaccess. App Service fournit un mécanisme distinct qui utilise le paramètre d’application PHP_INI_SCAN_DIR
.
Tout d’abord, exécutez la commande suivante pour ajouter un paramètre d’application appelé 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"
La valeur /usr/local/etc/php/conf.d
est le répertoire par défaut où php.ini
il existe. La valeur /home/site/ini
est le répertoire personnalisé dans lequel vous ajoutez un fichier .ini personnalisé. Vous séparez les valeurs par un signe deux-points (:
).
Accédez à la session Web SSH avec votre conteneur Linux.
Créez un répertoire dans /home/site
appelé ini
. Ensuite, créez un fichier .ini dans le /home/site/ini
répertoire, par exemple, settings.ini
, avec les directives que vous souhaitez personnaliser. Utilisez la même syntaxe que celle que vous utiliseriez dans un php.ini
fichier.
Conseil / Astuce
Les conteneurs Linux intégrés dans App Service sont utilisés /home
comme stockage partagé persistant.
Par exemple, pour modifier la valeur de expose_php
, exécutez les commandes suivantes :
cd /home/site
mkdir ini
echo "expose_php = Off" >> ini/setting.ini
Pour que les modifications prennent effet, redémarrez l’application.
Activer les extensions PHP
Les installations PHP intégrées contiennent les extensions les plus couramment utilisées. Vous pouvez activer d’autres extensions de la même manière que vous personnalisez php.ini directives.
Remarque
La meilleure façon de voir la version PHP et la configuration actuelle php.ini
consiste à appeler phpinfo()
dans votre application.
Pour activer d’autres extensions, procédez comme suit :
Ajoutez un
bin
répertoire au répertoire racine de votre application et placez-y les fichiers d’extension.dll , par exemple,mongodb.dll
. Assurez-vous que les extensions sont compatibles avec la version de PHP sur Azure, et qu’elles sont compatibles avec VC9 et non thread-safe (NTS).Déployez vos modifications.
Suivez les étapes de la section Personnaliser les directives PHP_INI_SYSTEM et ajoutez les extensions dans le fichier .ini personnalisé avec l’extension ou la directive zend_extension :
extension=d:\home\site\wwwroot\bin\mongodb.dll zend_extension=d:\home\site\wwwroot\bin\xdebug.dll
Pour que les modifications prennent effet, redémarrez l’application.
Les installations PHP intégrées contiennent les extensions les plus couramment utilisées. Vous pouvez activer d’autres extensions de la même manière que vous personnalisez php.ini directives.
Remarque
La meilleure façon de voir la version PHP et la configuration actuelle php.ini
consiste à appeler phpinfo()
dans votre application.
Pour activer d’autres extensions, procédez comme suit :
Ajoutez un
bin
répertoire au répertoire racine de votre application et placez-y les fichiers d’extension .so (par exemple,mongodb.so
). Assurez-vous que les extensions sont compatibles avec la version de PHP sur Azure, et qu’elles sont compatibles avec VC9 et non thread-safe (NTS).Déployez vos modifications.
Suivez les étapes de la section Personnaliser les directives PHP_INI_SYSTEM et ajoutez les extensions dans le fichier .ini personnalisé avec l’extension ou la directive zend_extension :
extension=/home/site/wwwroot/bin/mongodb.so zend_extension=/home/site/wwwroot/bin/xdebug.so
Pour que les modifications prennent effet, redémarrez l’application.
Accéder aux journaux de diagnostic
Utilisez l’outil standard error_log()
pour afficher vos journaux de diagnostic dans Azure App Service.
Pour accéder aux journaux de console générés à partir du code de votre application dans App Service, activez la journalisation des diagnostics en exécutant la commande suivante dans Cloud Shell :
az webapp log config --resource-group <resource-group-name> --name <app-name> --docker-container-logging filesystem --level Verbose
Les valeurs possibles pour --level
sont Error
, Warning
, Info
, et Verbose
. Chaque niveau suivant comprend le niveau précédent. Par exemple, Error
inclut uniquement les messages d’erreur.
Verbose
inclut tous les messages.
Après avoir activé la journalisation des diagnostics, exécutez la commande suivante pour afficher le flux de journaux :
az webapp log tail --resource-group <resource-group-name> --name <app-name>
Si les logs de console ne s’affichent pas immédiatement, revérifiez dans 30 secondes.
Pour arrêter le streaming de journaux à tout moment, sélectionnez Ctrl+C.
Vous pouvez accéder aux journaux de console générés depuis le conteneur.
Pour activer la journalisation des conteneurs, exécutez la commande suivante :
az webapp log config --name <app-name> --resource-group <resource-group-name> --docker-container-logging filesystem
Remplacez <app-name>
et <resource-group-name>
par des noms appropriés pour votre application web.
Après avoir activé la journalisation des conteneurs, exécutez la commande suivante pour afficher le flux de journaux :
az webapp log tail --name <app-name> --resource-group <resource-group-name>
Si les logs de console ne s’affichent pas immédiatement, revérifiez dans 30 secondes.
Pour arrêter le streaming de journaux à tout moment, sélectionnez Ctrl+C.
Résolution des problèmes
Lorsqu’une application PHP opérationnelle se comporte différemment dans App Service ou présente des erreurs, essayez les solutions suivantes :
- Accédez au flux de journaux de diagnostic.
- Testez l’application localement en mode de production. App Service exécute votre application en mode de production. Vous devez donc vous assurer que votre projet fonctionne comme prévu en mode de production localement. Par exemple:
- Selon le fichier
composer.json
, différents packages peuvent être installés pour le mode de production (require
contrerequire-dev
). - Certaines infrastructures web peuvent déployer des fichiers statiques différemment en mode de production.
- Certaines infrastructures web peuvent utiliser des scripts de démarrage personnalisés lorsqu’elles s’exécutent en mode de production.
- Selon le fichier
- Exécutez votre application dans App Service en mode débogage. Par exemple, dans Laravel, vous pouvez configurer votre application pour générer des messages de débogage en production en définissant le
APP_DEBUG
paramètretrue
d’application sur .
Ignorer le message robots933456 dans les logs informatiques
Le message suivant peut s’afficher dans les journaux d’activité du conteneur :
2019-04-08T14:07:56.641002476Z "-" - - [08/Apr/2019:14:07:56 +0000] "GET /robots933456.txt HTTP/1.1" 404 415 "-" "-"
Vous pouvez sans risque ignorer ce message.
/robots933456.txt
est un chemin d’URL factice utilisé par App Service pour vérifier si le conteneur est capable de traiter des requêtes. Une réponse 404 indique que le chemin d’accès n’existe pas et qu’il signale à App Service que le conteneur est sain et prêt à répondre aux demandes.