Check! Azure Web Apps で PHP 拡張モジュールを利用する(複数可)

  • 5
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

こんにちは、オークファンの @dz_ こと大平かづみです。

Prologue - はじめに

Azure の PaaS である Web Apps は、PHP も扱うことができます。

では、 Azure Web Apps で PHP の拡張モジュールを利用するにはどうしたらよいでしょうか?

普段、Linux で PHP のモジュールを扱うときは、so ファイルを配置して ini ファイルに設定する流れですが、PaaS かつ IIS (Microsoft 製の Web サーバー) なのでちょっとやり方が異なります。慣れてしまえばさくっとできるので、ご紹介いたします!

なお、公式ドキュメントではこちらにやり方が載っています。

Azure Web Apps で PHP 拡張モジュールを利用する方法

大まかな流れ

なんと 3ステップでできちゃいます!

  1. 入れたい PHPモジュールの dll ファイルを入手する
  2. Azure Web Apps のドキュメントルート配下に、 dll ファイルを配置する
  3. 「アプリケーション設定」>「アプリ設定」で、 PHP_EXTENSIONS にパスを設定する

前準備

Azure Web Apps の環境がすでにある前提で進めます。

phpinfo() を見れるようにする

今回、確認用に、phpinfo() をコールするだけの index.php を用意しました。

Azure Web Apps 内に簡単にファイルを作成・配置するには、「App Service Editor (旧 Visual Studio Online (Monaco)) 」か、「Advanced Tools (Kudu)」を利用するのがおすすめです。

App Service Editor を利用した例

20160911_azure-webapps_006.png

20160911_azure-webapps_009.png

PHPバージョンを確認しておく

ポータルから、PHP のバージョンを確認・指定することができます。本記事では PHP 5.6 (32bit) という環境で進めます。お好みに合わせて適宜変更してください。

20160911_azure-webapps_008.png

手順の解説

1. PHP 拡張モジュールの dll ファイルを入手する

dll ファイルは、各開発元か、PECL で探すと見つかります。なお、以下の互換に注意してください。

PHP の既定バージョンとの互換性があり、非スレッドセーフ (nts) 互換

PHP バージョン VC バージョン
PHP 7.x VC14
PHP 5.5, 5.6 VC11
PHP 5.4 以前 VC9

参考: Build your own PHP on Windows

例) Redis モジュール

例えば、 Redis のモジュールの場合は、PECL で検索し Windows 用のダウンロードページを探します。 PHP 5.6 (32bit) の環境とすると、NTS の「5.6 Non Thread Safe (NTS) x86」(php_redis-2.2.7-5.6-nts-vc11-x86.zip) を選択します。(なお、 PHP 7.x 用もあります。)

20160911_azure-webapps_012.png

例) Phalcon PHP Framework (拡張モジュールで取込み)

また、開発元から入手するパターンとして、私のお気に入りの Phalcon PHP Framework も入れてみましょう!(個人的趣味)

以下の Windows 用 DLL ダウンロードページから、PHP 5.6 (32bit) で利用するとして、「Phalcon 3.0.1 - Windows x86 for PHP 5.6.0 NTS (vc11) 」(phalcon_x86_vc11_php5.6.0_3.0.1_nts.zip) を選択します。

20160911_azure-webapps_013.png

それぞれ解凍して、 dll ファイルをご用意ください。

2. Azure Web Apps のドキュメントルート配下に、 dll ファイルを配置する

前準備の項でご紹介した「App Service Editor」か「Advanced Tools (Kudu)」で、ドキュメントルート (既定では D:\site\wwwroot ) に bin ディレクトリを作成します。その中に、 dll ファイルをアップロードしましょう。(Git など継続的インテグレーションを利用した話については、 Epilogue にて。)

App Service Editor を使った例

App Service Editor を開くと、ドキュメントルートのディレクトリが開かれます。ここに、 bin ディレクトリを作成し(または、最初からある場合があります)、そこに dllファイルをドラッグアンドドロップするだけ!

20160911_azure-webapps_011.png

ちなみに、 bin 直下じゃなくても bin\ext などサブディレクトリに置いてもパスを指定すれば通りました。

3. 「アプリケーション設定」>「アプリ設定」で、 PHP_EXTENSIONS にパスを設定する

配置した dllファイルに対して、パスを指定しましょう。ポータルの「アプリケーション設定」>「アプリ設定」で、以下のように相対パスで設定します。複数ある場合は、 , コンマで区切ります。

20160911_azure-webapps_015.png

変数名
PHP_EXTENSIONS bin\php_redis.dll,bin\php_phalcon.dll

作業完了!

これだけです!

phpinfo() を確認してみると、どちらの拡張モジュールも認識していることがわかります。

20160911_azure-webapps_016.png

簡単! ヾ(o´∀`o)ノ

Epilogue - おわりに

ちなみに私は、 dll ファイルをオンラインエディタや Kudu でアップするのではなく、git に同様のディレクトリ構成を作り、そこに dll ファイルをコミットしておく方法を取りました。

この方が見通しがいいし、バージョン管理ができてよいかと思います。さらに、 Azure Web Apps の「継続的インテグレーション設定」で自動デプロイを設定しておくと、さらに便利 (b’v`●)b♪

Git リポジトリのルートディレクトリ
└ bin
 ├ xxx.dll
 └ xxx.dll

ぜひ、ご参考になれば幸いです!