PHP-alkalmazás konfigurálása Azure-alkalmazás szolgáltatáshoz
PHP-verzió megjelenítése
Figyelmeztetés:
Ez az útmutató bemutatja, hogyan konfigurálhatja PHP-webalkalmazásait, mobil háttérrendszereit és API-alkalmazásait Azure-alkalmazás Szolgáltatásban.
Ez az útmutató alapvető fogalmakat és utasításokat tartalmaz az appokat az App Service-ben üzembe helyező PHP-fejlesztők számára. Ha még soha nem használta a Azure-alkalmazás szolgáltatást, először kövesse a PHP rövid útmutatóját és a PHP-t a MySQL-oktatóanyaggal.
Az aktuális PHP-verzió megjelenítéséhez futtassa a következő parancsot a Cloud Shellben:
az webapp config show --resource-group <resource-group-name> --name <app-name> --query phpVersion
Megjegyzés:
Egy fejlesztési pont kezeléséhez adja meg a paramétert --slot
, majd a pont nevét.
Az összes támogatott PHP-verzió megjelenítéséhez futtassa a következő parancsot a Cloud Shellben:
az webapp list-runtimes --os windows | grep PHP
Ez az útmutató bemutatja, hogyan konfigurálhatja PHP-webalkalmazásait, mobil háttérrendszereit és API-alkalmazásait Azure-alkalmazás Szolgáltatásban.
Ez az útmutató alapvető fogalmakat és utasításokat tartalmaz az appokat az App Service-ben üzembe helyező PHP-fejlesztők számára. Ha még soha nem használta a Azure-alkalmazás szolgáltatást, először kövesse a PHP rövid útmutatóját és a PHP-t a MySQL-oktatóanyaggal.
Az aktuális PHP-verzió megjelenítéséhez futtassa a következő parancsot a Cloud Shellben:
az webapp config show --resource-group <resource-group-name> --name <app-name> --query linuxFxVersion
Megjegyzés:
Egy fejlesztési pont kezeléséhez adja meg a paramétert --slot
, majd a pont nevét.
Az összes támogatott PHP-verzió megjelenítéséhez futtassa a következő parancsot a Cloud Shellben:
az webapp list-runtimes --os linux | grep PHP
PHP-verzió beállítása
Futtassa a következő parancsot a Cloud Shellben a PHP-verzió 8.1-esre való beállításához:
az webapp config set --resource-group <resource-group-name> --name <app-name> --php-version 8.1
Futtassa a következő parancsot a Cloud Shellben a PHP-verzió 8.1-esre való beállításához:
az webapp config set --resource-group <resource-group-name> --name <app-name> --linux-fx-version "PHP|8.1"
A Composer futtatása
Ha azt szeretné, hogy az App Service az üzembe helyezéskor futtassa a Composert , a legegyszerűbb módszer a Composer felvétele az adattárba.
A helyi terminálablakból módosítsa a könyvtárat az adattár gyökerére, és kövesse a letöltéskor megjelenő utasításokat a Composer letöltéséhez a composer.phar könyvtárgyökérre való letöltéséhez.
Futtassa a következő parancsokat (telepítenie kell az npm-et ):
npm install kuduscript -g
kuduscript --node --scriptType bash --suppressPrompt
Az adattár gyökérkönyvtára két további fájllal rendelkezik: .deployment és deploy.sh.
Nyissa meg a deploy.sh , és keresse meg a Deployment
szakaszt, amely így néz ki:
##################################################################################################################################
# Deployment
# ----------
Adja hozzá a szükséges eszköz futtatásához szükséges kódszakaszt a Deployment
szakasz végén:
# 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
Véglegesítse az összes módosítást, és telepítse a kódot a Git vagy a Zip használatával , engedélyezve a buildautomatizálást. A Composernek most az üzembe helyezés automatizálása részeként kell futnia.
Grunt/Bower/Gulp futtatása
Ha azt szeretné, hogy az App Service az üzembe helyezéskor népszerű automatizálási eszközöket (például Grunt, Bower vagy Gulp) futtasson, egyéni üzembehelyezési szkriptet kell megadnia. Az App Service akkor futtatja ezt a szkriptet, ha a Gittel vagy a Zip-alapú üzembe helyezést engedélyezi a buildautomatizálással.
Ahhoz, hogy az adattár futtathassa ezeket az eszközöket, hozzá kell adnia őket a package.json függőségeihez . Például:
"dependencies": {
"bower": "^1.7.9",
"grunt": "^1.0.1",
"gulp": "^3.9.1",
...
}
Helyi terminálablakból módosítsa a könyvtárat az adattár gyökerére, és futtassa a következő parancsokat (telepítenie kell az npm-et ):
npm install kuduscript -g
kuduscript --node --scriptType bash --suppressPrompt
Az adattár gyökérkönyvtára két további fájllal rendelkezik: .deployment és deploy.sh.
Nyissa meg a deploy.sh , és keresse meg a Deployment
szakaszt, amely így néz ki:
##################################################################################################################################
# Deployment
# ----------
Ez a szakasz futással npm install --production
végződik. Adja hozzá a szükséges eszköz futtatásához szükséges kódszakaszt a Deployment
szakasz végén:
Tekintse meg a MEAN.js mintában látható példát, ahol az üzembehelyezési szkript egy egyéni npm install
parancsot is futtat.
Bower
Ez a kódrészlet fut 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
Nyelő
Ez a kódrészlet fut 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
Grunt
Ez a kódrészlet fut grunt
.
if [ -e "$DEPLOYMENT_TARGET/Gruntfile.js" ]; then
cd "$DEPLOYMENT_TARGET"
eval ./node_modules/.bin/grunt
exitWithMessageOnError "Grunt failed"
cd - > /dev/null
fi
Testreszabott építési automatizálás
Ha az alkalmazást a Git használatával helyezi üzembe, vagy ha engedélyezve van a buildautomatizálással rendelkező zip-csomagok használata, az App Service buildautomatizálása az alábbi sorrendben halad végig:
- Futtassa az egyéni szkriptet, ha a megadott.
PRE_BUILD_SCRIPT_PATH
- Run
php composer.phar install
. - Futtassa az egyéni szkriptet, ha a megadott.
POST_BUILD_SCRIPT_PATH
PRE_BUILD_COMMAND
és POST_BUILD_COMMAND
alapértelmezés szerint üres környezeti változók. Az előzetes buildelési parancsok futtatásához definiálja a következőt PRE_BUILD_COMMAND
: . A buildelés utáni parancsok futtatásához definiálja a következőt POST_BUILD_COMMAND
:
Az alábbi példa a parancsok sorozatának két változóját adja meg vesszővel elválasztva.
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"
A buildautomatizálás testreszabásához további környezeti változókért lásd az Oryx konfigurációját.
További információ arról, hogy az App Service hogyan futtatja és fejleszti a PHP-alkalmazásokat Linuxon, tekintse meg az Oryx dokumentációját: A PHP-alkalmazások észlelése és felépítése.
Indítás testreszabása
Ha szeretné, futtathat egy egyéni parancsot a tároló indítási idején a következő parancs futtatásával a Cloud Shellben:
az webapp config set --resource-group <resource-group-name> --name <app-name> --startup-file "<custom-command>"
Access environment variables
Az App Service-szel az alkalmazás kódján kívül is megadhatja az alkalmazások beállításait. Ezután a standard getenv() mintával érheti el őket. Például egy DB_HOST
nevű alkalmazásbeállítás hozzáféréséhez használja a következő kódot:
getenv("DB_HOST")
Webhely gyökerének módosítása
Az Ön által választott webes keretrendszer egy alkönyvtárat használhat a webhely gyökérkönyvtáraként. A Laravel például a nyilvános/ alkönyvtárat használja a webhely gyökérkönyvtáraként.
A webhelygyökér testreszabásához állítsa be az alkalmazás virtuális alkalmazás elérési útját a az resource update
parancs használatával. Az alábbi példa a webhely gyökerét az adattár nyilvános vagy alkönyvtárára állítja.
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
Alapértelmezés szerint az Azure App Service virtuális alkalmazáselérési gyökérútvonala (/) a telepített alkalmazásfájlok gyökérkönyvtárára (sites\wwwroot) mutat.
Az Ön által választott webes keretrendszer egy alkönyvtárat használhat a webhely gyökérkönyvtáraként. A Laravel például az public/
alkönyvtárat használja a webhely gyökérkönyvtáraként.
Az App Service alapértelmezett PHP-rendszerképe az Nginxet használja, és az Nginx-kiszolgáló irányelvvel való konfigurálásával módosíthatja a root
webhelygyökerét. Ez a példakonfigurációs fájl az alábbi kódrészleteket tartalmazza, amelyek módosítják az root
irányelvet:
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
}
...
Az alapértelmezett tároló az /etc/nginx/sites-available/default helyen található konfigurációs fájlt használja. Ne feledje, hogy a fájlban végzett módosítások törlődnek az alkalmazás újraindításakor. Ha olyan módosítást szeretne végezni, amely az alkalmazás újraindításakor érvényes, adjon hozzá egy egyéni indítási parancsot, például az alábbi példában:
cp /home/site/wwwroot/default /etc/nginx/sites-available/default && service nginx reload
Ez a parancs lecseréli az alapértelmezett Nginx-konfigurációs fájlt egy alapértelmezett nevű fájlra az adattár gyökérkönyvtárában, és újraindítja az Nginxet.
Detect HTTPS session
Az App Service-ben a TLS/SSL-leállítás a hálózati terheléselosztóknál történik, így minden HTTPS-kérés titkosítatlan HTTP-kérésként éri el az alkalmazást. Ha az alkalmazáslogikának ellenőriznie kell, hogy a felhasználói kérések titkosítva vannak-e, vizsgálja meg az X-Forwarded-Proto
fejlécet.
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
// Do something when HTTPS is used
}
A népszerű webes keretrendszerek lehetővé teszik a X-Forwarded-*
szabványos alkalmazásminta információinak elérését. A CodeIgniterben a is_https() alapértelmezés szerint ellenőrzi az értékeket X_FORWARDED_PROTO
.
A php.ini beállításainak testreszabása
Ha módosítania kell a PHP-telepítést, az alábbi lépések végrehajtásával módosíthatja a php.ini irányelvek bármelyikét.
Megjegyzés:
A PHP-verzió és az aktuális php.ini konfiguráció megtekintésének legjobb módja a phpinfo() meghívása az alkalmazásban.
Nem PHP_INI_SYSTEM irányelvek testreszabása
Az PHP_INI_UStandard kiadás R, PHP_INI_PERDIR és PHP_INI_ALL irányelvek testreszabásához (lásd a php.ini irányelveket) adjon hozzá egy .user.ini
fájlt az alkalmazás gyökérkönyvtárához.
Adja hozzá a konfigurációs beállításokat a .user.ini
fájlhoz ugyanazzal a szintaxissal, amelyet a php.ini
fájlban használna. Ha például be szeretné kapcsolni a display_errors
beállítást, és 10M értékre szeretné állítani upload_max_filesize
a beállítást, a .user.ini
fájl a következő szöveget tartalmazná:
; Example Settings
display_errors=On
upload_max_filesize=10M
; Write errors to d:\home\LogFiles\php_errors.log
; log_errors=On
Telepítse újra az alkalmazást a módosításokkal, és indítsa újra.
A fájlhasználat .user.ini
alternatívaként az alkalmazásban a ini_set() használatával testre szabhatja ezeket a nem PHP_INI_SYSTEM irányelveket.
Az PHP_INI_UStandard kiadás R, PHP_INI_PERDIR és PHP_INI_ALL linuxos webalkalmazásokra vonatkozó irányelvek( például upload_max_filesize és expose_php) testreszabásához használjon egyéni "ini" fájlt. SSH-munkamenetben is létrehozhatja.
- Nyissa meg a KUDU-webhelyet https://< sitename.scm.azurewebsites.net>.
- A felső menüben válassza a Bash vagy az SSH lehetőséget.
- A Bash/SSH-ban nyissa meg a "/home/site/wwwroot" könyvtárat.
- Hozzon létre egy "ini" nevű könyvtárat (például mkdir ini).
- Módosítsa az aktuális munkakönyvtárat az imént létrehozott "ini" mappára.
A beállítások hozzáadásához létre kell hoznia egy "ini" fájlt. Ebben a példában a "extensions.ini" kifejezést használjuk. Nincsenek olyan fájlszerkesztők, mint a Vi, a Vim vagy a Nano, ezért echo használatával adja hozzá a beállításokat a fájlhoz. Módosítsa a "upload_max_filesize" 2 M-ről 50M-re. A következő paranccsal adja hozzá a beállítást, és hozzon létre egy "extensions.ini" fájlt, ha még nem létezik.
/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>
Ezután lépjen az Azure Portalra, és adjon hozzá egy alkalmazásbeállítást az imént létrehozott "ini" könyvtár vizsgálatához, hogy alkalmazza a módosítást upload_max_filesize.
- Nyissa meg az Azure Portalt , és válassza ki az App Service Linux PHP-alkalmazását.
- Válassza az alkalmazáshoz tartozó Alkalmazás Gépház lehetőséget.
- Az Alkalmazásbeállítások szakaszban válassza az + Új beállítás hozzáadása lehetőséget.
- Az alkalmazásbeállítás neveként írja be a "PHP_INI_SCAN_DIR" értéket, és az értékhez írja be a "/home/site/wwwroot/ini" értéket.
- Válassza a Mentés gombot.
Megjegyzés:
Ha újrafordított egy PHP-bővítményt, például a GD-t, kövesse a PHP-bővítmények újrafordításának lépéseit a Azure-alkalmazás szolgáltatásban – PHP-bővítmények hozzáadása
PHP_INI_SYSTEM irányelvek testreszabása
A PHP_INI_SYSTEM irányelvek testreszabásához (lásd a php.ini irányelveket) használja az PHP_INI_SCAN_DIR
alkalmazásbeállítást.
Először futtassa a következő parancsot a Cloud Shellben egy alkalmazásbeállítás PHP_INI_SCAN_DIR
hozzáadásához:
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings PHP_INI_SCAN_DIR="d:\home\site\ini"
Lépjen a Kudu konzolra (https://<app-name>.scm.azurewebsites.net/DebugConsole
) és lépjen a következőre d:\home\site
: .
Hozzon létre egy könyvtárat a hívásban d:\home\site
ini
, majd hozzon létre egy .ini fájlt a d:\home\site\ini
könyvtárban (például settings.ini) a testreszabni kívánt irányelvekkel. Használja ugyanazt a szintaxist, amelyet egy php.ini fájlban használna.
A expose_php értékének módosításához például futtassa a következő parancsokat:
cd /home/site
mkdir ini
echo "expose_php = Off" >> ini/setting.ini
A módosítások érvénybe lépéséhez indítsa újra az alkalmazást.
A PHP_INI_SYSTEM irányelvek testreszabásához (lásd a php.ini irányelveket) nem használhatja a .htaccess megközelítést. Az App Service egy külön mechanizmust biztosít az PHP_INI_SCAN_DIR
alkalmazásbeállítás használatával.
Először futtassa a következő parancsot a Cloud Shellben egy alkalmazásbeállítás PHP_INI_SCAN_DIR
hozzáadásához:
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"
/usr/local/etc/php/conf.d
az alapértelmezett könyvtár, ahol a php.ini létezik. /home/site/ini
az az egyéni könyvtár, amelyben egyéni .ini fájlt fog hozzáadni. Az értékeket egy .:
Lépjen a webes SSH-munkamenetre a Linux-tárolóval (https://<app-name>.scm.azurewebsites.net/webssh/host
).
Hozzon létre egy könyvtárat a hívásban /home/site
ini
, majd hozzon létre egy .ini fájlt a /home/site/ini
könyvtárban (például settings.ini) a testreszabni kívánt irányelvekkel. Használja ugyanazt a szintaxist, amelyet egy php.ini fájlban használna.
Tipp.
Az App Service beépített Linux-tárolóiban a /home megmaradó megosztott tárolóként van használva.
A expose_php értékének módosításához például futtassa a következő parancsokat:
cd /home/site
mkdir ini
echo "expose_php = Off" >> ini/setting.ini
A módosítások érvénybe lépéséhez indítsa újra az alkalmazást.
PHP-bővítmények engedélyezése
A beépített PHP-telepítések tartalmazzák a leggyakrabban használt bővítményeket. A php.ini direktívák testreszabásával megegyező módon engedélyezheti a további bővítményeket.
Megjegyzés:
A PHP-verzió és az aktuális php.ini konfiguráció megtekintésének legjobb módja a phpinfo() meghívása az alkalmazásban.
További bővítmények engedélyezéséhez kövesse az alábbi lépéseket:
Adjon hozzá egy könyvtárat bin
az alkalmazás gyökérkönyvtárához, és helyezze bele a .dll
bővítményfájlokat (például mongodb.dll). Győződjön meg arról, hogy a bővítmények kompatibilisek az Azure PHP-verziójával, és VC9 és nem szálbiztos (nts) kompatibilisek.
A módosítások üzembe helyezése.
Kövesse az PHP_INI_SYSTEM irányelvek testreszabása című szakasz lépéseit, és adja hozzá a bővítményeket az egyéni .ini fájlhoz a kiterjesztéssel vagy zend_extension irányelvekkel.
extension=d:\home\site\wwwroot\bin\mongodb.dll
zend_extension=d:\home\site\wwwroot\bin\xdebug.dll
A módosítások érvénybe lépéséhez indítsa újra az alkalmazást.
A beépített PHP-telepítések tartalmazzák a leggyakrabban használt bővítményeket. A php.ini direktívák testreszabásával megegyező módon engedélyezheti a további bővítményeket.
Megjegyzés:
A PHP-verzió és az aktuális php.ini konfiguráció megtekintésének legjobb módja a phpinfo() meghívása az alkalmazásban.
További bővítmények engedélyezéséhez kövesse az alábbi lépéseket:
Adjon hozzá egy könyvtárat bin
az alkalmazás gyökérkönyvtárához, és helyezze bele a .so
bővítményfájlokat (például mongodb.so). Győződjön meg arról, hogy a bővítmények kompatibilisek az Azure PHP-verziójával, és VC9 és nem szálbiztos (nts) kompatibilisek.
A módosítások üzembe helyezése.
Kövesse az PHP_INI_SYSTEM irányelvek testreszabása című szakasz lépéseit, és adja hozzá a bővítményeket az egyéni .ini fájlhoz a kiterjesztéssel vagy zend_extension irányelvekkel.
extension=/home/site/wwwroot/bin/mongodb.so
zend_extension=/home/site/wwwroot/bin/xdebug.so
A módosítások érvénybe lépéséhez indítsa újra az alkalmazást.
Access diagnostic logs
A standard error_log() segédprogrammal diagnosztikai naplókat készíthet a Azure-alkalmazás szolgáltatásban való megjelenítéshez.
Az alkalmazáskódból létrehozott konzolnaplók App Service-ben történő eléréséhez kapcsolja be a diagnosztikai naplózást a következő parancs a Cloud Shellben történő futtatásával:
az webapp log config --resource-group <resource-group-name> --name <app-name> --docker-container-logging filesystem --level Verbose
A --level
lehetséges értékei: Error
, Warning
, Info
és Verbose
. Minden szint tartalmazza az azt megelőző szintet. Például: az Error
csak a hibaüzeneteket tartalmazza, a Verbose
pedig az összes üzenetet.
Ha a diagnosztikai naplózás be van kapcsolva, futtassa a következő parancsot a naplóstream megtekintéséhez:
az webapp log tail --resource-group <resource-group-name> --name <app-name>
Ha nem jelennek meg azonnal a konzolnaplófájlok, ellenőrizze ismét 30 másodperc múlva.
Megjegyzés:
A naplófájlokat a böngészőből is megtekintheti a következő címen: https://<app-name>.scm.azurewebsites.net/api/logs/docker
.
A Ctrl
+C
billentyűparanccsal bármikor leállíthatja a naplóstreamelést.
A tárolón belülről létrehozott konzolnaplókhoz hozzáférhet.
Először kapcsolja be a tárolónaplózást a következő parancs futtatásával:
az webapp log config --name <app-name> --resource-group <resource-group-name> --docker-container-logging filesystem
Cserélje le és <resource-group-name>
írja be <app-name>
a webalkalmazásnak megfelelő neveket.
A tárolónaplózás bekapcsolása után futtassa a következő parancsot a naplóstream megtekintéséhez:
az webapp log tail --name <app-name> --resource-group <resource-group-name>
Ha nem jelennek meg azonnal a konzolnaplófájlok, ellenőrizze ismét 30 másodperc múlva.
Ha bármikor le szeretné állítani a naplóstreamelést, írja be a Ctrl C billentyűkombinációt.+
A naplófájlokat a böngészőben is megvizsgálhatja a következő helyen https://<app-name>.scm.azurewebsites.net/api/logs/docker
: .
Hibaelhárítás
Ha egy működő PHP-alkalmazás másképp viselkedik az App Service-ben, vagy hibákat tapasztal, próbálkozzon a következőkkel:
- Hozzáférés a naplóstreamhez.
- Tesztelje az alkalmazást helyileg éles módban. Az App Service éles módban futtatja az alkalmazást, ezért gondoskodnia kell arról, hogy a projekt a várt módon működjön helyileg éles módban. For example:
- A composer.json típustól függően különböző csomagok telepíthetők éles üzemmódra (
require
vs.require-dev
). - Egyes webes keretrendszerek eltérő módon helyezhetnek üzembe statikus fájlokat éles módban.
- Egyes webes keretrendszerek egyéni indítási szkripteket használhatnak éles módban való futtatáskor.
- A composer.json típustól függően különböző csomagok telepíthetők éles üzemmódra (
- Futtassa az alkalmazást az App Service-ben hibakeresési módban. A Laravelben például úgy konfigurálhatja az alkalmazást, hogy a hibakeresési üzeneteket éles környezetben adja ki az
APP_DEBUG
alkalmazás beállításávaltrue
.
robots933456 a naplókban
A következő üzenet jelenhet meg a tárolónaplókban:
2019-04-08T14:07:56.641002476Z "-" - - [08/Apr/2019:14:07:56 +0000] "GET /robots933456.txt HTTP/1.1" 404 415 "-" "-"
Az üzenet biztonságosan figyelmen kívül hagyható. /robots933456.txt
egy olyan próba URL-cím, amelyet az App Service annak a vizsgálatára használ, hogy a tároló képes-e a kérések kiszolgálására. A 404-es válasz egyszerűen azt jelenti, hogy a cím nem létezik, azonban jelzi az App Service számára, hogy a tároló kifogástalan állapotú, és készen áll a kérések megválaszolására.
Következő lépések
Vagy tekintse meg a további erőforrásokat: