Azure App Service 向けの Windows PHP アプリを構成するConfigure a Windows PHP app for Azure App Service

このガイドでは、Azure App Service の PHP Web アプリ、モバイル バックエンド、API アプリを構成する方法を示します。This guide shows you how to configure your PHP web apps, mobile back ends, and API apps in Azure App Service. このガイドは、Windows プラットフォームでホストされているアプリに適用されます。This guide applies to apps hosted on the Windows platform. Linux アプリに関する詳細については、「Azure App Service 向けの Linux PHP アプリを構成する」を参照してください。For information about linux apps, see Configure a Linux PHP app for Azure App Service.

このガイドでは、App Service にアプリをデプロイする PHP 開発者向けに主要な概念と手順を示します。This guide provides key concepts and instructions for PHP developers who deploy apps to App Service. Azure App Service を使用したことがない場合は、最初に PHP クイック スタートPHP と MySQL のチュートリアルに従ってください。If you've never used Azure App Service, follow the PHP quickstart and PHP with MySQL tutorial first.

PHP バージョンを表示するShow PHP version

現在の PHP バージョンを表示するには、Cloud Shell で次のコマンドを実行します。To show the current PHP version, run the following command in the Cloud Shell:

az webapp config show --resource-group <resource-group-name> --name <app-name> --query phpVersion

サポートされているすべての PHP バージョンを表示するには、Cloud Shell で次のコマンドを実行します。To show all supported PHP versions, run the following command in the Cloud Shell:

az webapp list-runtimes | grep php

PHP バージョンを設定するSet PHP version

PHP バージョンを 7.4 に設定するには、Cloud Shell で次のコマンドを実行します。Run the following command in the Cloud Shell to set the PHP version to 7.4:

az webapp config set --name <app-name> --resource-group <resource-group-name> --php-version 7.4

Composer を実行するRun Composer

デプロイ時に App Service で Composer を実行する場合、最も簡単な方法は、Composer をリポジトリに含めることです。If you want App Service to run Composer at deployment time, the easiest way is to include the Composer in your repository.

ローカルのターミナル ウィンドウから、リポジトリのルートにディレクトリを変更し、Download Composer (Composer のダウンロード) の指示に従い、ディレクトリ ルートに composer.phar をダウンロードします。From a local terminal window, change directory to your repository root, and follow the instructions at download Composer to download composer.phar to the directory root.

次のコマンドを実行します (npm をインストールしておく必要があります)。Run the following commands (you need npm installed):

npm install kuduscript -g
kuduscript --node --scriptType bash --suppressPrompt

リポジトリのルートには現在、 .deploymentdeploy.sh の 2 つの追加ファイルがあります。Your repository root now has two additional files: .deployment and deploy.sh.

deploy.sh を開き、次のような Deployment セクションを見つけます。Open deploy.sh and find the Deployment section, which looks like this:

##################################################################################################################################
# Deployment
# ----------

Deployment セクションの末尾に必要なツールの実行に必要なコード セクションを追加します。Add the code section you need to run the required tool at the end of the Deployment section:

# 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

Git か、ビルド自動化を有効にした Zip デプロイを利用してすべての変更をコミットし、コードをデプロイします。Commit all your changes and deploy your code using Git, or Zip deploy with build automation enabled. これで Composer はデプロイの自動化の一部として実行しているはずです。Composer should now be running as part of deployment automation.

Grunt/Bower/Gulp を実行するRun Grunt/Bower/Gulp

Grunt、Bower、Gulp など、一般的な自動化ツールを App Service でデプロイ時に実行する場合、カスタム デプロイ スクリプトを提供する必要があります。If you want App Service to run popular automation tools at deployment time, such as Grunt, Bower, or Gulp, you need to supply a custom deployment script. App Service では、Git か、ビルド自動化を有効にした Zip デプロイを利用してデプロイするとき、このスクリプトが実行されます。App Service runs this script when you deploy with Git, or with Zip deployment with build automation enabled.

リポジトリでこれらのツールを実行できるようにするには、package.json での依存関係にこれらを追加する必要があります。To enable your repository to run these tools, you need to add them to the dependencies in package.json. 次に例を示します。For example:

"dependencies": {
  "bower": "^1.7.9",
  "grunt": "^1.0.1",
  "gulp": "^3.9.1",
  ...
}

ローカル ターミナル ウィンドウから、ディレクトリをリポジトリのルートに変更し、次のコマンドを実行します (npm をインストールしておく必要があります)。From a local terminal window, change directory to your repository root and run the following commands (you need npm installed):

npm install kuduscript -g
kuduscript --node --scriptType bash --suppressPrompt

リポジトリのルートには現在、 .deploymentdeploy.sh の 2 つの追加ファイルがあります。Your repository root now has two additional files: .deployment and deploy.sh.

deploy.sh を開き、次のような Deployment セクションを見つけます。Open deploy.sh and find the Deployment section, which looks like this:

##################################################################################################################################
# Deployment
# ----------

このセクションは、npm install --production の実行で終わります。This section ends with running npm install --production. Deployment セクションの末尾に必要なツールの実行に必要なコード セクションを追加します。Add the code section you need to run the required tool at the end of the Deployment section:

MEAN.js サンプルでの例を参照してください。ここでは、デプロイ スクリプトはカスタム npm install コマンドも実行します。See an example in the MEAN.js sample, where the deployment script also runs a custom npm install command.

BowerBower

このスニペットは bower install を実行します。This snippet runs 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

GulpGulp

このスニペットは gulp imagemin を実行します。This snippet runs 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

GruntGrunt

このスニペットは grunt を実行します。This snippet runs grunt.

if [ -e "$DEPLOYMENT_TARGET/Gruntfile.js" ]; then
  cd "$DEPLOYMENT_TARGET"
  eval ./node_modules/.bin/grunt
  exitWithMessageOnError "Grunt failed"
  cd - > /dev/null
fi

環境変数へのアクセスAccess environment variables

App Service では、アプリ コードの外部でアプリ設定を指定できます。In App Service, you can set app settings outside of your app code. その後、標準の getenv() パターンを使用して、それらにアクセスできます。Then you can access them using the standard getenv() pattern. たとえば、DB_HOST というアプリ設定にアクセスするには、次のコードを使用します。For example, to access an app setting called DB_HOST, use the following code:

getenv("DB_HOST")

サイト ルートを変更するChange site root

選択した Web フレームワークでは、サイト ルートとしてサブディレクトリを使用できます。The web framework of your choice may use a subdirectory as the site root. たとえば、Laravel では、サイト ルートとして public/ サブディレクトリが使用されます。For example, Laravel, uses the public/ subdirectory as the site root.

サイト ルートをカスタマイズするには、az resource update コマンドを利用し、アプリの仮想アプリケーション パスを設定します。To customize the site root, set the virtual application path for the app by using the az resource update command. 次の例では、リポジトリの public/ サブディレクトリにサイト ルートが設定されます。The following example sets the site root to the public/ subdirectory in your 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

既定では、Azure App Service は、デプロイされたアプリケーション ファイルのルート ディレクトリ (sites\wwwroot) に対して仮想アプリケーションのルート パス ( / ) をポイントします。By default, Azure App Service points the root virtual application path (/) to the root directory of the deployed application files (sites\wwwroot).

HTTPS セッションの検出Detect HTTPS session

App Service では、SSL 終了がネットワーク ロード バランサーで発生するため、すべての HTTPS リクエストは暗号化されていない HTTP リクエストとしてアプリに到達します。In App Service, SSL termination happens at the network load balancers, so all HTTPS requests reach your app as unencrypted HTTP requests. ユーザー要求が暗号化されているかどうかをアプリ ロジックが確認する必要がある場合は、X-Forwarded-Proto ヘッダーを調べます。If your app logic needs to check if the user requests are encrypted or not, inspect the X-Forwarded-Proto header.

if (isset($_SERVER['X-Forwarded-Proto']) && $_SERVER['X-Forwarded-Proto'] === 'https') {
  // Do something when HTTPS is used
}

一般的な Web フレームワークでは、標準のアプリ パターンで X-Forwarded-* 情報にアクセスできます。Popular web frameworks let you access the X-Forwarded-* information in your standard app pattern. CodeIgniter では、is_https () は既定で X_FORWARDED_PROTO の値をチェックします。In CodeIgniter, the is_https() checks the value of X_FORWARDED_PROTO by default.

php.ini 設定をカスタマイズするCustomize php.ini settings

PHP のインストールを変更する必要がある場合は、以下の手順に従って、いずれかの php.ini ディレクティブを変更できます。If you need to make changes to your PHP installation, you can change any of the php.ini directives by following these steps.

注意

PHP のバージョンと現在の php.ini 構成を確認する最善の方法は、アプリで phpinfo() を呼び出すことです。The best way to see the PHP version and the current php.ini configuration is to call phpinfo() in your app.

非 PHP_INI_SYSTEM ディレクティブをカスタマイズするCustomize-non-PHP_INI_SYSTEM directives

PHP_INI_USER、PHP_INI_PERDIR、PHP_INI_ALL ディレクティブ (php.ini ディレクティブを参照) をカスタマイズするには、.user.ini ファイルをアプリのルート ディレクトリに追加します。To customize PHP_INI_USER, PHP_INI_PERDIR, and PHP_INI_ALL directives (see php.ini directives), add a .user.ini file to the root directory of your app.

php.ini ファイルで使用するものと同じ構文を使用して、構成設定を .user.ini ファイルに追加します。Add configuration settings to the .user.ini file using the same syntax you would use in a php.ini file. たとえば、display_errors 設定をオンにして upload_max_filesize を 10 M に設定する場合は、.user.ini ファイルに次のテキストを含めます。For example, if you wanted to turn on the display_errors setting and set upload_max_filesize setting to 10M, your .user.ini file would contain this text:

 ; Example Settings
 display_errors=On
 upload_max_filesize=10M

 ; Write errors to d:\home\LogFiles\php_errors.log
 ; log_errors=On

変更内容でアプリを再デプロイし、再起動します。Redeploy your app with the changes and restart it.

.user.ini ファイルを使用する代わりに、アプリで ini_set() を使用し、これらの非 PHP_INI_SYSTEM ディレクティブをカスタマイズできます。As an alternative to using a .user.ini file, you can use ini_set() in your app to customize these non-PHP_INI_SYSTEM directives.

PHP_INI_SYSTEM ディレクティブをカスタマイズするCustomize PHP_INI_SYSTEM directives

PHP_INI_SYSTEM ディレクティブをカスタマイズするには (php.ini ディレクティブを参照)、 .htaccess アプローチは使用できません。To customize PHP_INI_SYSTEM directives (see php.ini directives), you can't use the .htaccess approach. App Service は、PHP_INI_SCAN_DIR アプリ設定を使用して、別のメカニズムを提供します。App Service provides a separate mechanism using the PHP_INI_SCAN_DIR app setting.

最初に、Cloud Shell で次のコマンドを実行して、PHP_INI_SCAN_DIR というアプリ設定を追加します。First, run the following command in the Cloud Shell to add an app setting called 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"

Kudu コンソール (https://<app-name>.scm.azurewebsites.net/DebugConsole) に移動し、d:\home\site に移動します。Navigate to the Kudu console (https://<app-name>.scm.azurewebsites.net/DebugConsole) and navigate to d:\home\site.

d:\home\siteini というディレクトリを作成し、続いてカスタマイズするディレクティブを使用した .ini ファイル (たとえば、settings.ini) を d:\home\site\ini ディレクトリに作成します。Create a directory in d:\home\site called ini, then create an .ini file in the d:\home\site\ini directory (for example, settings.ini) with the directives you want to customize. php.ini ファイルで使用するものと同じ構文を使用します。Use the same syntax you would use in a php.ini file.

たとえば、expose_php の値を変更するには、次のコマンドを実行します。For example, to change the value of expose_php run the following commands:

cd /home/site
mkdir ini
echo "expose_php = Off" >> ini/setting.ini

変更内容を有効にするには、アプリを再起動します。For the changes to take effect, restart the app.

PHP 拡張機能を有効にするEnable PHP extensions

ビルトイン PHP のインストールには、最もよく使用される拡張機能が含まれています。The built-in PHP installations contain the most commonly used extensions. php.ini ディレクティブのカスタマイズと同じ方法で、追加の拡張機能を有効にすることができます。You can enable additional extensions in the same way that you customize php.ini directives.

注意

PHP のバージョンと現在の php.ini 構成を確認する最善の方法は、アプリで phpinfo() を呼び出すことです。The best way to see the PHP version and the current php.ini configuration is to call phpinfo() in your app.

追加の拡張機能を有効にするには、次の手順に従います。To enable additional extensions, by following these steps:

アプリのルート ディレクトリに bin ディレクトリを追加して、その中に .so 拡張ファイル (たとえば、mongodb.so) を配置します。Add a bin directory to the root directory of your app and put the .so extension files in it (for example, mongodb.so). 拡張機能が Azure の PHP バージョンと互換性があり、VC9 および非スレッドセーフ (nts) 互換であることを確認してください。Make sure that the extensions are compatible with the PHP version in Azure and are VC9 and non-thread-safe (nts) compatible.

変更をデプロイします。Deploy your changes.

PHP_INI_SYSTEM ディレクティブのカスタマイズの手順に従って、extension または zend_extension ディレクティブを使用したカスタム .ini ファイルに拡張機能を追加します。Follow the steps in Customize PHP_INI_SYSTEM directives, add the extensions into the custom .ini file with the extension or zend_extension directives.

extension=d:\home\site\wwwroot\bin\mongodb.so
zend_extension=d:\home\site\wwwroot\bin\xdebug.so

変更内容を有効にするには、アプリを再起動します。For the changes to take effect, restart the app.

診断ログにアクセスするAccess diagnostic logs

標準の error_log() ユーティリティを使用し、Azure App Service に診断ログを表示させます。Use the standard error_log() utility to make your diagnostic logs to show up in Azure App Service.

App Service のアプリケーション コード内から生成されたコンソール ログにアクセスするには、Cloud Shell で次のコマンドを実行して、診断ログを有効にします。To access the console logs generated from inside your application code in App Service, turn on diagnostics logging by running the following command in the Cloud Shell:

az webapp log config --resource-group <resource-group-name> --name <app-name> --application-logging true --level Verbose

--level で有効な値は、ErrorWarningInfo、および Verbose です。Possible values for --level are: Error, Warning, Info, and Verbose. 後続の各レベルには、前のレベルが含まれます。Each subsequent level includes the previous level. たとえば、Error にはエラー メッセージのみが含まれ、Verbose にはすべてのメッセージが含まれます。For example: Error includes only error messages, and Verbose includes all messages.

診断ログがオンになったら、次のコマンドを実行して、ログのストリームを確認します。Once diagnostic logging is turned on, run the following command to see the log stream:

az webapp log tail --resource-group <resource-group-name> --name <app-name>

コンソール ログがすぐに表示されない場合は、30 秒以内にもう一度確認します。If you don't see console logs immediately, check again in 30 seconds.

注意

https://<app-name>.scm.azurewebsites.net/api/logs/docker で、ブラウザーからログ ファイルを検査することもできます。You can also inspect the log files from the browser at https://<app-name>.scm.azurewebsites.net/api/logs/docker.

任意のタイミングでログのストリーミングを停止するには、Ctrl+C と入力します。To stop log streaming at any time, type Ctrl+C.

トラブルシューティングTroubleshooting

動作中の PHP アプリが App Service で異なる動作をしたり、エラーが発生した場合は、次のことを試してください。When a working PHP app behaves differently in App Service or has errors, try the following:

  • ログ ストリームにアクセスします。Access the log stream.
  • 実稼働モードでローカルにアプリをテストします。Test the app locally in production mode. App Service では、アプリが実稼働モードで実行されるので、プロジェクトがローカルで実稼働モードで予想どおりに動作することを確認する必要があります。App Service runs your app in production mode, so you need to make sure that your project works as expected in production mode locally. 次に例を示します。For example:
    • 特定の Web フレームワークでは、実稼働モードで静的ファイルを別にデプロイすることがあります。Certain web frameworks may deploy static files differently in production mode.
    • 特定の Web フレームワークでは、実稼働モードで実行しているときにカスタム スタートアップ スクリプトを使用することがあります。Certain web frameworks may use custom startup scripts when running in production mode.
  • デバッグ モードで Azure App Service でアプリを実行します。Run your app in App Service in debug mode. たとえば、Laravel で、APP_DEBUG アプリ設定を true に指定することにより、実稼働環境でのデバッグ メッセージを出力するようにアプリを構成できます。For example, in Laravel, you can configure your app to output debug messages in production by setting the APP_DEBUG app setting to true.

次のステップNext steps