こんにちは、オークファンの @dz_ こと大平かづみです。
Prologue - はじめに
Azure の PaaS である Web Apps は、PHP も扱うことができます。
では、 Azure Web Apps で PHP の拡張モジュールを利用するにはどうしたらよいでしょうか?
普段、Linux で PHP のモジュールを扱うときは、so ファイルを配置して ini ファイルに設定する流れですが、PaaS かつ IIS (Microsoft 製の Web サーバー) なのでちょっとやり方が異なります。慣れてしまえばさくっとできるので、ご紹介いたします!
なお、公式ドキュメントではこちらにやり方が載っています。
Azure Web Apps で PHP 拡張モジュールを利用する方法
大まかな流れ
なんと 3ステップでできちゃいます!
- 入れたい PHPモジュールの dll ファイルを入手する
- Azure Web Apps のドキュメントルート配下に、 dll ファイルを配置する
- 「アプリケーション設定」>「アプリ設定」で、
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 を利用した例
PHPバージョンを確認しておく
ポータルから、PHP のバージョンを確認・指定することができます。本記事では PHP 5.6 (32bit) という環境で進めます。お好みに合わせて適宜変更してください。
手順の解説
- 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 用もあります。)
例) 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
) を選択します。
それぞれ解凍して、 dll ファイルをご用意ください。
- 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ファイルをドラッグアンドドロップするだけ!
ちなみに、 bin
直下じゃなくても bin\ext
などサブディレクトリに置いてもパスを指定すれば通りました。
- 「アプリケーション設定」>「アプリ設定」で、
PHP_EXTENSIONS
にパスを設定する
配置した dllファイルに対して、パスを指定しましょう。ポータルの「アプリケーション設定」>「アプリ設定」で、以下のように相対パスで設定します。複数ある場合は、 ,
コンマで区切ります。
例
変数名 | 値 |
---|---|
PHP_EXTENSIONS |
bin\php_redis.dll,bin\php_phalcon.dll |
作業完了!
これだけです!
phpinfo()
を確認してみると、どちらの拡張モジュールも認識していることがわかります。
簡単! ヾ(o´∀`o)ノ
Epilogue - おわりに
ちなみに私は、 dll ファイルをオンラインエディタや Kudu でアップするのではなく、git に同様のディレクトリ構成を作り、そこに dll ファイルをコミットしておく方法を取りました。
この方が見通しがいいし、バージョン管理ができてよいかと思います。さらに、 Azure Web Apps の「継続的インテグレーション設定」で自動デプロイを設定しておくと、さらに便利 (b’v`●)b♪
Git リポジトリのルートディレクトリ
└ bin
├ xxx.dll
└ xxx.dll
ぜひ、ご参考になれば幸いです!