Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Výstraha
PHP ve Windows dosáhlo konce podpory v listopadu 2022. PHP se podporuje jenom pro App Service v Linuxu. Tento článek je určen pouze pro referenci.
V této příručce se dozvíte, jak nakonfigurovat webové aplikace PHP, mobilní back-endy a aplikace API ve službě Azure App Service. Jsou zde pokryty nejběžnější konfigurační úlohy.
Pokud s App Service začínáte, měli byste nejprve postupovat podle rychlého startu Vytvoření webové aplikace PHP v Azure App Service a kurzu Nasazení aplikace PHP, MySQL a Redis do Azure App Service .
Zobrazení verze PHP
Chcete-li zobrazit aktuální verzi PHP, spusťte následující příkaz. Můžete použít Azure Cloud Shell:
az webapp config show --resource-group <resource-group-name> --name <app-name> --query phpVersion
Nahraďte <resource-group-name>
a <app-name>
názvy, které jsou vhodné pro vaši webovou aplikaci.
Poznámka:
Pokud chcete řešit vývojový slot, zahrňte parametr --slot
následovaný názvem slotu.
Chcete-li zobrazit všechny podporované verze PHP, spusťte následující příkaz:
az webapp list-runtimes --os windows | grep PHP
V této příručce se dozvíte, jak nakonfigurovat webové aplikace PHP, mobilní back-endy a aplikace API ve službě Azure App Service. Jsou zde pokryty nejběžnější konfigurační úlohy.
Pokud s App Service začínáte, měli byste nejprve postupovat podle rychlého startu Vytvoření webové aplikace PHP v Azure App Service a kurzu Nasazení aplikace PHP, MySQL a Redis do Azure App Service .
Zobrazení verze PHP
Chcete-li zobrazit aktuální verzi PHP, spusťte následující příkaz. Můžete použít Azure Cloud Shell.
az webapp config show --resource-group <resource-group-name> --name <app-name> --query linuxFxVersion
Nahraďte <resource-group-name>
a <app-name>
názvy, které jsou vhodné pro vaši webovou aplikaci.
Poznámka:
Pokud chcete řešit vývojový slot, zahrňte parametr --slot
následovaný názvem slotu.
Chcete-li zobrazit všechny podporované verze PHP, spusťte následující příkaz:
az webapp list-runtimes --os linux | grep PHP
Nastavení verze PHP
Chcete-li nastavit verzi PHP na 8.1, spusťte následující příkaz:
az webapp config set --resource-group <resource-group-name> --name <app-name> --php-version 8.1
Chcete-li nastavit verzi PHP na 8.1, spusťte následující příkaz:
az webapp config set --resource-group <resource-group-name> --name <app-name> --linux-fx-version "PHP|8.1"
Co se stane se zastaralými runtimy ve službě App Service?
Zastaralé verze runtime jsou organizací, která je spravuje, zrušeny nebo mají zásadní bezpečnostní zranitelnosti. Proto se odeberou z vytváření a konfigurace stránek na portálu. Pokud je zastaralý modul runtime skrytý na portálu, všechny aplikace, které stále používají tento modul runtime, budou dál běžet.
Pokud chcete vytvořit aplikaci se zastaralou verzí modulu runtime, která se už na portálu nezobrazuje, použijte Azure CLI, šablonu ARM nebo Bicep. Tyto alternativy nasazení umožňují vytvářet zastaralé moduly runtime, které byly odebrány na portálu, ale stále se podporují.
Pokud je modul runtime plně odebraný z platformy Služby App Service, obdrží vlastník předplatného Azure před odebráním e-mailové oznámení.
Spustit Composer
Pokud chcete, aby služba App Service spouštěla nástroj Composer v době nasazení, nejjednodušší je zahrnout Composer do svého úložiště.
V okně místního terminálu změňte adresář na kořen úložiště. Potom postupujte podle pokynů na webu Download Composer a stáhněte composer.phar
si ho do kořenového adresáře.
Spusťte následující příkazy. Abyste je mohli spustit, musíte mít nainstalovaný npm .
npm install kuduscript -g
kuduscript --node --scriptType bash --suppressPrompt
Kořenový adresář úložiště má nyní dva nové soubory: .deployment
a deploy.sh
.
Otevřete deploy.sh
a najděte oddíl, který vypadá jako v tomto příkladu Deployment
:
##################################################################################################################################
# Deployment
# ----------
Na konec oddílu Deployment
přidejte oddíl kódu, který potřebujete ke spuštění požadovaného nástroje:
# 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
Potvrďte všechny změny a nasaďte kód pomocí Gitu nebo pomocí nasazení ZIP s povolenou automatizací sestavení. Nástroj Composer by teď měl být spuštěný jako součást automatizace nasazení.
Spuštění Boweru, Gulpu nebo Gruntu
Pokud chcete, aby App Service v době nasazení spouštěl oblíbené automatizační nástroje, jako je Bower, Gulp nebo Grunt, musíte zadat vlastní skript nasazení. App Service spustí tento skript při nasazení pomocí Gitu nebo nasazením ZIP s povolenou automatizací sestavení.
Pokud chcete úložišti povolit spouštění těchto nástrojů, musíte je přidat do závislostí v package.json
souboru . Například:
"dependencies": {
"bower": "^1.7.9",
"grunt": "^1.0.1",
"gulp": "^3.9.1",
...
}
V okně místního terminálu změňte adresář na kořenový adresář úložiště a spusťte následující příkazy. Abyste je mohli spustit, musíte mít nainstalovaný npm .
npm install kuduscript -g
kuduscript --node --scriptType bash --suppressPrompt
Kořenový adresář úložiště má nyní dva nové soubory: .deployment
a deploy.sh
.
Otevřete deploy.sh
a najděte oddíl, který vypadá jako v tomto příkladu Deployment
:
##################################################################################################################################
# Deployment
# ----------
Tento oddíl končí spuštěním npm install --production
.
Na konec oddílu Deployment
přidejte oddíl kódu, který potřebujete ke spuštění požadovaného nástroje:
Podívejte se na příklad v ukázce MEAN.js, kde skript nasazení také spouští vlastní npm install
příkaz.
Loubí
Tento fragment kódu se spustí 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
Lok
Tento fragment kódu se spustí 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
Chrochtání
Tento fragment kódu se spustí grunt
:
if [ -e "$DEPLOYMENT_TARGET/Gruntfile.js" ]; then
cd "$DEPLOYMENT_TARGET"
eval ./node_modules/.bin/grunt
exitWithMessageOnError "Grunt failed"
cd - > /dev/null
fi
Přizpůsobte automatizaci sestavení
Pokud aplikaci nasadíte pomocí Gitu nebo pomocí balíčků ZIP s povolenou automatizací sestavení, automatizace sestavení v App Service provede následující postup:
- Spusťte vlastní skript, pokud to specifikuje
PRE_BUILD_SCRIPT_PATH
. - Spusťte
php composer.phar install
. - Spusťte vlastní skript, pokud to specifikuje
POST_BUILD_SCRIPT_PATH
.
PRE_BUILD_COMMAND
a POST_BUILD_COMMAND
jsou proměnné prostředí, které jsou ve výchozím nastavení prázdné. Chcete-li spustit příkazy prebuild, definujte PRE_BUILD_COMMAND
. Chcete-li spustit příkazy po sestavení, definujte POST_BUILD_COMMAND
.
Následující příklad určuje dvě proměnné na řadu příkazů oddělených čárkami:
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"
Další proměnné prostředí pro přizpůsobení automatizace sestavení najdete viz Konfigurace Oryxu.
Informace o tom, jak App Service spouští a sestavuje aplikace PHP v Linuxu, najdete v dokumentaci k Oryxu o tom, jak se zjišťují a sestavují aplikace PHP.
Přizpůsobení spuštění
Vlastní příkaz můžete spustit při spuštění kontejneru. Spusťte následující příkaz:
az webapp config set --resource-group <resource-group-name> --name <app-name> --startup-file "<custom-command>"
Přístup k proměnným prostředí
Ve službě App Service můžete nastavit nastavení aplikace mimo kód aplikace. K těmto nastavením pak můžete přistupovat pomocí standardního getenv()
vzoru. Například pro přístup k aplikačnímu nastavení s názvem DB_HOST
použijete následující kód:
getenv("DB_HOST")
Změna kořenového adresáře webu
Webová architektura podle vašeho výběru může jako kořen webu použít podadresář.
Laravel například používá public/
podadresář jako kořen webu.
Pokud chcete upravit kořen webu, nastavte cestu virtuální aplikace pro aplikaci pomocí az resource update
příkazu. Následující příklad nastaví kořen webu na public/
podadresář ve vašem úložišti:
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
Ve výchozím nastavení Azure App Service odkazuje kořenovou cestu virtuální aplikace (/
) do kořenového adresáře nasazených souborů aplikace (sites\wwwroot
).
Webová architektura podle vašeho výběru může jako kořen webu použít podadresář.
Laravel například používá public/
podadresář jako kořen webu.
Výchozí image PHP pro App Service používá NGINX a změníte kořen webu tak, že nakonfigurujete server NGINX s direktivouroot
. Tento příklad konfiguračního souboru obsahuje následující fragment kódu, který mění direktivu root
:
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
}
...
Výchozí kontejner používá konfigurační soubor na adrese /etc/nginx/sites-available/default
. Veškeré úpravy tohoto souboru budou po restartu aplikace vymazány. Pokud chcete provést změnu, která je efektivní při restartování aplikace, přidejte vlastní spouštěcí příkaz podobný tomuto příkladu:
cp /home/site/wwwroot/default /etc/nginx/sites-available/default && service nginx reload
Tento příkaz nahradí výchozí konfigurační soubor NGINX souborem pojmenovaným default
v kořenovém adresáři úložiště a restartuje NGINX.
Zjištění relace HTTPS
Ve službě App Service dochází k ukončení protokolu TLS/SSL v nástrojích pro vyrovnávání zatížení sítě, takže všechny požadavky HTTPS dosáhnou vaší aplikace jako nešifrované požadavky HTTP. Pokud logika vaší aplikace potřebuje zkontrolovat, jestli jsou požadavky uživatelů zašifrované, zkontrolujte hlavičku X-Forwarded-Proto
:
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
// Do something when HTTPS is used
}
Oblíbené webové architektury umožňují přístup k X-Forwarded-*
informacím ve standardním vzoru aplikace. V CodeIgniter zkontroluje funkce is_https() hodnotu X_FORWARDED_PROTO
ve výchozím nastavení.
Přizpůsobte nastavení php.ini
Pokud potřebujete provést změny instalace PHP, můžete pomocí následujícího postupu změnit libovolnou direktivuphp.ini .
Poznámka:
Nejlepší způsob, jak zobrazit verzi PHP a aktuální php.ini
konfiguraci, je použít phpinfo()
ve vaší aplikaci.
Přizpůsobte direktivy mimo PHP_INI_SYSTEM
Pokud chcete přizpůsobit PHP_INI_USER
, PHP_INI_PERDIR
a PHP_INI_ALL
direktivy, přidejte .user.ini
soubor do kořenového adresáře aplikace.
Do souboru přidejte nastavení .user.ini
konfigurace pomocí stejné syntaxe, jakou byste použili v php.ini
souboru. Pokud byste například chtěli zapnout nastavení display_errors
a nastavit upload_max_filesize
na hodnotu 10M
, soubor .user.ini
by obsahoval tento text:
; Example Settings
display_errors=On
upload_max_filesize=10M
; Write errors to d:\home\LogFiles\php_errors.log
; log_errors=On
Znovu nasaďte aplikaci se změnami a restartujte ji.
Jako alternativu k použití souboru .user.ini
můžete v aplikaci použít ini_set()
, abyste přizpůsobili tyto direktivy ne-PHP_INI_SYSTEM
.
Chcete-li přizpůsobit PHP_INI_USER
direktivy , PHP_INI_PERDIR
a PHP_INI_ALL
pro webové aplikace Linux, například upload_max_filesize
a expose_php
, použijte vlastní soubor .ini . Můžete ho vytvořit v relaci SSH. Nejprve nastavte adresář:
- Přejděte na své stránky Kudu. Pokud chcete získat náhodné hodnoty hash a oblasti, zkopírujte v přehledu aplikace výchozí doménu.
- V horní nabídce vyberte možnost Konzola pro ladění a poté Bash nebo SSH.
- V Bash nebo SSH přejděte do adresáře
/home/site/wwwroot
. - Vytvořte adresář s názvem
ini
(napříkladmkdir ini
). - Změňte aktuální pracovní adresář na složku
ini
, kterou jste vytvořili.
Dále vytvořte soubor.ini , do kterého přidáte svá nastavení. Tento příklad používá extensions.ini
. Nejsou zde žádné editory souborů, jako je Vi, Vim nebo Nano, takže použijte Echo
pro přidání nastavení do souboru.
upload_max_filesize
Změňte hodnotu z 2M
na 50M
. Pomocí následujícího příkazu přidejte nastavení a vytvořte extensions.ini
soubor, pokud ještě neexistuje:
/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>
Na webu Azure Portal přidejte nastavení aplikace pro kontrolu ini
adresáře, který jste právě vytvořili, aby se změna použila pro upload_max_filesize
:
- Přejděte na Azure Portal a vyberte svou aplikaci App Service Linux PHP.
- Přejděte do Nastavení>Proměnné prostředí.
- Vyberte + Přidat.
- Do pole Název zadejte PHP_INI_SCAN_DIR a do pole Hodnota zadejte
:/home/site/wwwroot/ini
. - Vyberte možnost Použít (Apply) a pak znovu Použít (Apply). Potvrďte provedené změny.
Poznámka:
Pokud jste překompilovali rozšíření PHP, například GD, postupujte podle pokynů v tématu Rekompiling rozšíření PHP.
Přizpůsobení direktiv PHP_INI_SYSTEM
K přizpůsobení PHP_INI_SYSTEM
direktiv použijte PHP_INI_SCAN_DIR
nastavení aplikace.
Nejprve spusťte následující příkaz a přidejte nastavení aplikace s názvem 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"
V Azure Portal vyberte svou aplikaci. V části Vývojové nástroje v nabídce postranního panelu vyberte možnost Pokročilé nástroje a poté přejděte na d:\home\site
používání SSH.
Vytvořte adresář v d:\home\site
s názvem ini
. Poté v adresáři vytvořte soubor d:\home\site\ini
, například , s direktivami, settings.ini
které chcete přizpůsobit. Použijte stejnou syntaxi, jakou byste použili v php.ini
souboru.
Pokud například chcete změnit hodnotu expose_php
, spusťte následující příkazy:
cd /home/site
mkdir ini
echo "expose_php = Off" >> ini/setting.ini
Aby se změny projevily, restartujte aplikaci.
Chcete-li přizpůsobit PHP_INI_SYSTEM
direktivy, nemůžete použít přístup .htaccess . App Service poskytuje samostatný mechanismus, který používá PHP_INI_SCAN_DIR
nastavení aplikace.
Nejprve spusťte následující příkaz a přidejte nastavení aplikace s názvem 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"
Hodnota /usr/local/etc/php/conf.d
je výchozí adresář, kde php.ini
existuje. Hodnota /home/site/ini
je vlastní adresář, do kterého přidáte vlastní soubor.ini . Hodnoty oddělíte dvojtečkam (:
).
Přejděte na webovou SSH relaci s Linux kontejnerem.
Vytvořte adresář v /home/site
s názvem ini
. Poté v adresáři vytvořte soubor /home/site/ini
, například , s direktivami, settings.ini
které chcete přizpůsobit. Použijte stejnou syntaxi, jakou byste použili v php.ini
souboru.
Návod
Integrované kontejnery Linuxu ve službě App Service se používají /home
jako trvalé sdílené úložiště.
Pokud například chcete změnit hodnotu expose_php
, spusťte následující příkazy:
cd /home/site
mkdir ini
echo "expose_php = Off" >> ini/setting.ini
Aby se změny projevily, restartujte aplikaci.
Povolení rozšíření PHP
Integrované instalace PHP obsahují nejčastěji používaná rozšíření. Další rozšíření můžete povolit stejným způsobem, jakým přizpůsobujete php.ini direktivy.
Poznámka:
Nejlepší způsob, jak zobrazit verzi PHP a aktuální php.ini
konfiguraci, je použít phpinfo()
ve vaší aplikaci.
Chcete-li povolit další rozšíření, postupujte následovně:
Přidejte adresář
bin
do kořenového adresáře vaší aplikace a vložte do něj soubory rozšíření .dll, napříkladmongodb.dll
. Ujistěte se, že jsou rozšíření kompatibilní s verzí PHP v Azure a že jsou kompatibilní s VC9 a bez vláken (NTS).Nasaďte změny.
Postupujte podle kroků v části Přizpůsobit direktivy PHP_INI_SYSTEM a přidejte rozšíření do vlastního souboru .ini s příponou nebo direktivou zend_extension :
extension=d:\home\site\wwwroot\bin\mongodb.dll zend_extension=d:\home\site\wwwroot\bin\xdebug.dll
Aby se změny projevily, restartujte aplikaci.
Integrované instalace PHP obsahují nejčastěji používaná rozšíření. Další rozšíření můžete povolit stejným způsobem, jakým přizpůsobujete php.ini direktivy.
Poznámka:
Nejlepší způsob, jak zobrazit verzi PHP a aktuální php.ini
konfiguraci, je použít phpinfo()
ve vaší aplikaci.
Chcete-li povolit další rozšíření, postupujte následovně:
bin
Přidejte adresář do kořenového adresáře vaší aplikace a vložte do něj soubory s příponou .so (napříkladmongodb.so
). Ujistěte se, že jsou rozšíření kompatibilní s verzí PHP v Azure a že jsou kompatibilní s VC9 a bez vláken (NTS).Nasaďte změny.
Postupujte podle kroků v části Přizpůsobit direktivy PHP_INI_SYSTEM a přidejte rozšíření do vlastního souboru .ini s příponou nebo direktivou zend_extension :
extension=/home/site/wwwroot/bin/mongodb.so zend_extension=/home/site/wwwroot/bin/xdebug.so
Aby se změny projevily, restartujte aplikaci.
Přístup k diagnostickým protokolům
Pomocí standardního error_log()
nástroje můžete diagnostické protokoly zobrazit ve službě Azure App Service.
Pokud chcete získat přístup k protokolům konzoly vygenerovaným v kódu aplikace ve službě App Service, zapněte protokolování diagnostiky spuštěním následujícího příkazu v Cloud Shellu:
az webapp log config --resource-group <resource-group-name> --name <app-name> --docker-container-logging filesystem --level Verbose
Možné hodnoty pro --level
jsou Error
, Warning
, Info
a Verbose
. Každá další úroveň zahrnuje předchozí úroveň. Například Error
obsahuje pouze chybové zprávy.
Verbose
obsahuje všechny zprávy.
Po zapnutí protokolování diagnostiky spuštěním následujícího příkazu zobrazte stream protokolu:
az webapp log tail --resource-group <resource-group-name> --name <app-name>
Pokud se protokoly konzoly nezobrazí okamžitě, zkontrolujte to znovu za 30 sekund.
Pokud chcete streamování protokolů kdykoli zastavit, vyberte Ctrl+C.
Přístup k protokolům konzoly vygenerovaným z kontejneru.
Protokolování kontejneru zapnete spuštěním následujícího příkazu:
az webapp log config --name <app-name> --resource-group <resource-group-name> --docker-container-logging filesystem
Nahraďte <app-name>
a <resource-group-name>
názvy, které jsou vhodné pro vaši webovou aplikaci.
Po zapnutí protokolování kontejneru spusťte následující příkaz, abyste viděli stream protokolu:
az webapp log tail --name <app-name> --resource-group <resource-group-name>
Pokud se protokoly konzoly nezobrazí okamžitě, zkontrolujte to znovu za 30 sekund.
Pokud chcete streamování protokolů kdykoli zastavit, vyberte Ctrl+C.
Řešení problémů
Pokud se funkční aplikace PHP chová jinak ve službě App Service nebo obsahuje chyby, vyzkoušejte následující řešení:
- Získejte přístup ke streamu diagnostického protokolu.
- Otestujte aplikaci místně v produkčním režimu. App Service spouští vaši aplikaci v produkčním režimu, takže se musíte ujistit, že váš projekt funguje podle očekávání v produkčním režimu místně. Například:
- V závislosti na vašem
composer.json
souboru se můžou nainstalovat různé balíčky pro produkční režim (require
versusrequire-dev
). - Některé webové architektury můžou v produkčním režimu nasazovat statické soubory jinak.
- Některé webové architektury můžou při spuštění v produkčním režimu používat vlastní spouštěcí skripty.
- V závislosti na vašem
- Spusťte aplikaci ve službě App Service v režimu ladění. Například v Laravelu můžete aplikaci nakonfigurovat tak, aby v produkčním prostředí aplikace generovala ladicí zprávy tím, že nastavíte
APP_DEBUG
natrue
.
Ignorovat zprávu robots933456 v protokolech
V protokolech kontejneru se může zobrazit následující zpráva:
2019-04-08T14:07:56.641002476Z "-" - - [08/Apr/2019:14:07:56 +0000] "GET /robots933456.txt HTTP/1.1" 404 415 "-" "-"
Tuto zprávu klidně ignorujte.
/robots933456.txt
je fiktivní cesta URL, kterou App Service používá ke kontrole, jestli kontejner dokáže obsloužit požadavky. Odpověď 404 značí, že cesta neexistuje, a signalizuje app Service, že kontejner je v pořádku a připravený reagovat na požadavky.