LoginSignup
2
0

More than 1 year has passed since last update.

それでも Azure App Service Windows インスタンスで PHP を使いたい

Last updated at Posted at 2022-12-02

はじめに

PHP は、Apache Web サーバーだけでなく、Windows の IIS サーバーでもサポートされていました。
しかし、2022 年 11 月 28 日で、PHP バージョン 7.4 のサポートが終了になり、かつ Windows での PHP バージョン 8.0 以降はサポートしなくなりました。なお、この方針は、2 年くらい前 (2020 年 7 月) にアナウンスされています。

もちろん、この方針は、Azure (Azure App Service Windows インスタンスも含む) でも変わりません。

サポート終了後も引き続き PHP アプリケーションは動作しますが、セキュリティパッチのサポートなどは提供されませんし、いつまで PHP アプリケーションが動作し続けられるかも不明です。...とても不安ですね。:cold_sweat:

それでも Azure App Service Windows インスタンスで PHP を使いたい!

引き続き Azure App Service Windows インスタンス上で PHP アプリケーションを動作させたい場合は、Project Nami チームが用意してくれた「PHP x64」を Azure App Service Windows インスタンスに導入すれば何とかなりそうです。

本投稿は、これを実際に導入してみた時の備忘録として書き残しておきます。

PHP ver. 8.x を導入する

前述のリポジトリを検証環境に展開します。

検証環境

  • Azure App Service
    • OS : Windows
    • 言語スタック : PHP
    • PHP バージョン : PHP 7.4
    • プラットフォーム : 32 Bit
  • Azure App Service Plan
    • SKU : Basic ※Basic 以上である必要があります

検証環境を確認 (導入前)

App Service リソースの構成設定を確認してみます。
Azure ポータルで、App Service リソースの [設定] カテゴリの [構成] を開き、[全般設定] タブの「言語スタックとバージョン」、「プラットフォーム」を確認します。

言語は「PHP 7.4」で、プラットフォームは「32 Bit」ですね。

image.png

次に、実行している PHP のバージョンと設定情報を確認してみます。
Azure ポータルで、App Service リソースの [開発ツール] カテゴリの [コンソール] を開いて、以下のコマンドで「PHP バージョン」と「PHP 設定情報」を確認します。

# PHP バージョンを確認
php -v
# PHP 設定情報を確認
php -i | HEAD

PHP バージョンは「7.4.30」ですね。

image.png

PHP ver.8.x をデプロイする

PHP ver.8.x コンテンツをアップロードする

以下より入手します。

検証時は「PHP ver. 8.1」がリリースされていたので、この ZIP ファイルをダウンロードして、解凍しておきます。

FTP クライアントを使ってアップロードしますので、「FTP エンドポイント」と「資格情報」を入手します。Azure ポータルで、App Service リソースの [デプロイメント] カテゴリの [デプロイ センター] を開き、[FTPS 資格情報] タブで確認できます。

image.png

あ。FTP 接続できるようにしておくことを忘れずに。:sweat_smile:
Azure ポータルで、App Service リソースの [設定] カテゴリの [構成] を開き、[全般設定] タブの [FTP の状態] を有効にしておきます。

image.png

FTP クライアントで接続して、/site/wwwroot フォルダー配下に /bin フォルダー、さらにその下に /php フォルダー を作成して、ディレクトリを移動します。

先ほど ZIP 解凍したコンテンツすべてを /site/wwwroot/bin/php フォルダーにアップロードします。

image.png

アップロードし終わったら、FTP サイトから切断して、FTP クライアントを閉じます。

構成を設定する

Azure ポータルで、App Service リソースの [設定] カテゴリの [構成] を開き、[パスのマッピング] タブで、[新しいハンドラー マッピング] をクリック、以下の情報を入力して追加します。

設定項目 設定値
拡張子 *.php
スクリプト プロセッサ D:\home\site\wwwroot\bin\php\php-cgi.exe
引数 (空欄)

image.png

[アプリケーション設定] タブで、[新しいアプリケーション設定] をクリック、以下の情報を入力して追加します。

設定項目 設定値
名前 PHP_FCGI_MAX_REQUESTS
10000

image.png

[全般設定] タブで、以下の項目を変更します。

設定項目 設定値
言語スタック PHP 以外の言語
言語バージョン 適当に
プラットフォーム 64 Bit

image.png

なお、App Service Plan の SKU が「Basic」以上でないとプラットフォームで「64 Bit」を指定することができません。 アップグレードしましょう。

image.png

最後に、[保存] をクリックして、今までの設定を保存します。

では、PHP ver. 8.x 対応の PHP アプリをデプロイして、念のため App Service リソースを再起動しておきましょう。

検証環境を確認 (導入後)

導入前と同じように 、Azure ポータルで App Service リソースの [開発ツール] カテゴリの [コンソール] で php -vphp -i | HEAD コマンドを実行して、「PHP バージョン」と「PHP 設定情報」を確認します。

image.png

検証時は以下のように出力されました。
それぞれこのように出力されていれば、ダイジョウブでしょう!:v:

>php -v
PHP 8.1.12 (cli) (built: Oct 25 2022 18:20:48) (NTS Visual C++ 2019 x64)
Copyright (c) The PHP Group
Zend Engine v4.1.12, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.12, Copyright (c), by Zend Technologies

>php -i | HEAD
phpinfo()
PHP Version => 8.1.12

System => Windows NT RD00155DB122A5 10.0 build 14393 (Windows Server 2016) AMD64
Build Date => Oct 25 2022 18:16:43
Build System => Microsoft Windows Server 2019 Datacenter [10.0.17763]
Compiler => Visual C++ 2019
Architecture => x64
Configure Command => cscript /nologo /e:jscript configure.js  "--enable-snapshot-build" "--enable-debug-pack" "--disable-zts" "--with-pdo-oci=..\..\..\..\instantclient\sdk,shared" "--with-oci8-19=..\..\..\..\instantclient\sdk,shared" "--enable-object-out-dir=../obj/" "--enable-com-dotnet=shared" "--without-analyzer" "--with-pgo"
Server API => Command Line Interface

まとめ

これで Azure App Service Windows インスタンス上で PHP アプリケーションを引き続き動作させることができそうです。が、いつまでもこれが通用するとは限らないので、これは「回避策」だと捉え、今後は「恒久的な対応」の検討と対処を行っていきましょう。:thinking:

なお、今回紹介した手順は、あくまで今まで動作していた PHP アプリケーションを維持させるための処置であり、正式なサポートではないことをご理解ください。そして、ご利用の際は自己責任でお願いします。:bow:

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0