【ワレコのWEBプログラミング】Windows10 + IIS + VSCode + PHP + XdebugでPHP開発環境を作る

スポンサーリンク

ワテの場合、Windows VPSレンタルサーバーを契約している。

そのWindows VPSでは、各種の自作WEBサービスを世間に公開している。

開発環境は以下の通り。

開発パソコン

OS

Windows10 Pro x64

開発ツール

Visual Studio 2017 Community

テンプレート

ASP.NET MVC

ASP.NET Web Form

使用言語

C#

TypeScript

JavaScript

PHP

SQL

 

Windows VPS

レンタルサーバー

ABLENET 社のWindows VPS(Win2プラン)

OS

Windows Server 2012 R2

WEBサーバー

IIS

データベース

SQL Server Express 2016

MySQL

サーバーOSはWindows Sever 2012R2を使っているが、最新版のWindows Sever 2016も利用出来るので、そろそろアップデートしたいと考えている。

このような開発環境やサーバーを使って各種の革新的WEBサービスを世間に提供しているのであるが、今一つ人気が無い。あかん。

 

Windows VPSサーバーはVisual Studioと非常に相性が良くて、ASP.NETを使ってWEBサイトを開発する場合には最適な環境だと思う。

つまり、開発マシンのVisual StudioでWEBサイトを作成して、ローカルなIISサーバーでデバッグ。

そして、本番用Windows VPSにDeploy(=FTP転送のような機能)すると、簡単にWEBサイトを更新出来る。

しかし、難点が一つある。それはWindows VPSサーバーは、他のLinux系サーバーと比較して月額料金が割高なのだ。

なぜなら、Windows VPSの場合には、Windows Server OSのライセンス料金が上乗せされているので、その分高いのだ。

具体的には、Linux VPSが月額1000円ならWindows VPSだと1500円~3000円くらいの感じかと思う。

ここはWindowsから脱却して、PHPでLinuxサーバー向けのWEBサイトを作成すると言う一般的な手法が費用の点では最もお勧めかなと思って、ワテもPHPプログラミングに本格的に取り組む事にしたのだ。

その為には、PHPでWEBサイトを作成する開発環境を整備する必要がある。

当記事では、表題の通りWindows10 + IIS + VSCode + PHP + Xdebugの組み合わせでPHP開発環境を作るための手順を備忘録としてまとめた。

では本題に入ろう。

スポンサーリンク
スポンサーリンク

Windows10 + IIS + VSCode + PHP + XdebugでPHP開発環境を作る

Windowsでプログラム開発を行うならVisual Studio がお勧めだ。

Visual Studioは何と言ってもマイクロソフト純正の高機能なプログラム開発環境であり、史上最強の統合開発環境(IDE)と言っても良い。

エディタは各種の言語に対応していて、非常に細かい設定が可能だ。

デバッガーも使い易い。

しかしながら、PHPのデバッガーはマイクロソフト純正のものが無いのだ。

現状では、以下の有料製品があるのみだ。

PHP Tools for Visual Studio 2017 (DEVSENSE社)

値段を調べてみたら以前よりは安くなっている。

Visual Studio
For individual developer
¥9,990/New
¥5,990/更新

引用元 https://www.devsense.com/ja/purchase#individuals

確か、数年前は新規購入で数万円だったと思う。

まあ、思い切って買っても良いのだが、ワテが調べた限りではVisual Studio Codeを使えばPHPデバッガーも無料で利用出来るらしい。

まずは、無料でPHP開発環境を整える事にした。

ワテの場合、Visual Studio は2003の頃から使い込んでいるが、Visual Studio Codeは試しに少し使ってみた程度。

先日も、Pythonプログラムを少し試したりした。

まあVisual Studioが使えるならVisual Studio Code(=VSCode)も使っていれば慣れるだろう。

と言う事で、VSCodeでPHP開発を行う決意をしたのだ。

エディタはVSCodeを使う

ワテの場合は、既にVSCodeはインストールしている。もし皆さんもVSCodeは既にインストール済ならこの章はスキップして頂いても良い。

Visual Studio Codeをインストール

公式サイトからVSCodeのインストーラーをダウンロードして実行すれば簡単にインストール出来る。

https://code.visualstudio.com/

まあ、インストールは難しいところは無いので、早速PHP関連の拡張機能を追加インストールしよう。

PHP関連拡張機能をインストール

下図で示すVSCodeの初期ウインドウの左端にある拡張機能アイコンをクリックする。

下図のように検索欄に [php] と入力して検索する。

PHP関連の拡張機能が沢山ヒットするので好きなやつを入れれば良い。

デバッグ関連は、PHP Debugが必要になる。

ワテの場合は、このPHP DebugとPHP IntelliSenseの二つを入れた。

PHPインストール

さて、いよいよPHPの本体を入れよう。

PHPの公式ダウンロードサイトは以下のURLだ。

http://php.net/downloads.php

その中にWindows版PHPのダウンロードURLがある。

https://windows.php.net/download

このURLを開くと下図のページが出る。

PHP7.2をインストール

ワテの場合はWEBサーバーはIISを利用する予定だ。

Windows10の場合、確かデフォルトでIISがインストールされて有効化されている(はず)なので、手っ取り早いし、IISは昔から使っているのでワテの場合は使い慣れているのだ。

もしApacheが好みの人は、XAMPPをインストールすると良いだろう。

XAMPPは以下の文字から構成されている。

X – Windows、Linux、macOS、Solarisのクロスプラットフォーム
A – ApacheのA
M – MariaDB(旧バージョンはMySQL)のM
P – PHPのP
P – PerlのP

引用元 https://ja.wikipedia.org/wiki/XAMPP

XAMPPを入れれば、オールインワンで上記のアプリをインストール出来る。

さて、ワテの場合はWindows 10(x64) でIISを使うのだが、PHP7.2は下図に示すように、四種類もある。

要するに、

x86 / x64

Thread Safe / Non Thread Safe

の組み合わせで四種類あるのだ。

IISを使うならNon Thread Safeを選べと書いてあるのでそうする。

Which version do I choose?

If you are using PHP as FastCGI with IIS you should use the Non-Thread Safe (NTS) versions of PHP.

引用元 https://windows.php.net/download#php-7.2

IISでNon Thread Safeを使う理由は各自調査して下さい。

ワテの場合はWindows 10(x64)なので、結局、x64のNon Thread Safe版と言う事になる。

このVC15 x64 Non Thread Safe (2018-Nov-08 07:50:04)のZipファイルをダウンロードした。

ちなみにDebug Packと言うのは、PHPをデバッグする用途に使うようだ。なので、この後導入するXDebugとは関係ないようだ。

ワテの場合は、当初は、このDebug Packを入れればXDEBUGが付いているのだと勘違いした。

どうせなら、PHP+XDEBUGがセットになったZIPを作ってくれれば便利なのになあ。

PHPの開発元と、XDEBUGの開発元は違うのかな。なので、別々にダウンロードする必要があるのかな。まあ、その辺りの事情は良く知らないが、出来れば合体して開発すればいいと思うのだが。

PHPのインストール先はどこでも良い

ダウンロードしたZIPを解凍すれば、インストールは完了だ。

ワテの場合は、Cドライブでは無くて、余っていたDドライブに入れた。

D:\php-7.2.12-nts-Win32-VC15-x64

まあ、この長ったらしいパス名が嫌いな人は、

D:\php7.2.12

などにリネームしても良いだろう。

あるいは、シンボリックを作成するのも良いだろう。

C:\Users\wate>mklink /D D:\php7.2.12 D:\php-7.2.12-nts-Win32-VC15-x64

D:\php7.2.12 <<===>> D:\php-7.2.12-nts-Win32-VC15-x64 のシンボリック リンクが作成されました

まあ、ワテの場合は、D:\php-7.2.12-nts-Win32-VC15-x64のまま使う事にした。

環境変数にPHPのパスを追加する

[Windows]+[Pause]キーを押すとシステム設定の画面が表示出来る。

その中にある「システムの詳細設定」をクリックして「環境変数」の設定画面を出す(下図)。

ユーザーの環境変数にあるPath変数に、PHPのパスを追加する(下図)。

設定が完了すれば、Windowsを再起動するなどの必要は無いようだ。

でも、気になる人は念のために再起動すると良いかも。

PHPの動作確認を行う

例えばDOS画面を開いて以下のコマンドを実行してみる。

C:\Users\wate>php -v
PHP 7.2.12 (cli) (built: Nov 8 2018 05:47:24) ( NTS MSVC15 (Visual C++ 2017) x64 )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Xdebug v2.6.1, Copyright (c) 2002-2018, by Derick Rethans
C:\Users\wate>

こんな風にPHPのバージョンが表示されれば成功だ。

php.iniの設定

php.ini-developmentをコピペしてphp.iniを作成する。

そして、以下のように編集した。

extension_dir = "./ext"      ;//★有効化した
fastcgi.impersonate = 1      ;//★何や知らんがIISでは1らしいので有効化した。
extension=mbstring           ;//★有効化した
extension=openssl            ;//★有効化した
zend_extension="php_xdebug-2.6.1-7.2-vc15-nts-x86_64.dll" ;//★追加した
xdebug.remote_enable = 1     ;//★追加した
xdebug.remote_autostart = 1  ;//★追加した
extension=php_curl.dll       ;//★追加した

ちなみに、他のサイトを見ていると、以下のように絶対パスでxdebug拡張機能を指定している例もある。ワテも試してみたが絶対パスで指定しても良いみたいだが、上のようにファイル名だけでも良い。

zend_extension="D:\php-7.2.12-nts-Win32-VC15-x64\ext\php_xdebug-2.6.1-7.2-vc15-nts-x86_64.dll"

あと、以下の設定は有効化しても良いみたいだが、デフォルトのままでも良いみたい。

;xdebug.remote_port = 9000
;xdebug.remote_host = localhost

なので、ワテの場合はデフォルトのままコメント化した状態にしておいた。

XDEBUGをインストール

次はそのXDEBUGのインストールだ。

インストールと言っても、ファイルをダウンロードして上のphp.iniで指定したextフォルダに保存するだけで良い。

早速XDEBUGをダウンロードする。

ところが、

Xdebug 2.7.0beta1

Xdebug 2.6.1

など沢山あるのでどれを選んだら良いのか分からない。

結論としては、beta版などは選ばないほうが良いみたい。

ワテの場合は、まず、Xdebug 2.7.0beta1を選んだ。

でも、これでは上手く行かなかったので、Xdebug 2.6.1をダウンロードした(下図)。

この場合も、

x64 / x86

TS(Thread Safe) / 無印(Non Thread Safe)

の違いがあるので、ワテの場合はXdebug 2.6.1の64bit版のNon Thread Safeを選択した。

ダウンロードしたら、extフォルダに保管する。

これでXDEBUGのインストールは完了だ。

WEBサーバーはIISを使う

「Windowsの機能の有効化または無効化」を表示する(下図)。

手っ取り早く行うには、「ファイル名を指定して実行」に

optionalfeatures.exe

と入力して[OK]をクリックすると下図が開く。

PHPを使う為には、CGIの機能が必要になるのでもし有効化されていない(チェックが無い)場合にはチェックを入れて[OK]をクリックする。

インターネットインフォメーションサービス(IIS)マネージャーを開く

下図に示すようにスタートメニューから、IISの管理画面を開いてみる。

あるいは、ファイル名を指定して実行で

inetmgr

と入力して[OK]でも良い。

そうすると下図に示すインターネットインフォメーションサービス(IIS)マネージャー画面が起動する。

PHP開発用のWEBサイトを作成する

さて、PHPでWEBサイト作成を行う為のフォルダを作成しておく。

要するに、WEBサイトのルートディレクトリだ。

どこでも良いので、ワテの場合は、PHP本体と同じフォルダに002-PHPWebSiteと言うフォルダを作成した(下図)。変な名前だ。

この002-PHPWebSiteフォルダをIISマネージャーに追加する作業が必要になる。

WEBサイトフォルダをIISマネージャーに追加してPHPの設定を行う

Default Web Siteの上で右クリックして「仮想ディレクトリの追加」を開く(下図)。

下図のように入力してエイリアスと物理パスを関連付ける。

[OK]をクリックすれば完了だ。

その結果、Default Web Siteの末尾にPHPWebSiteが表示される。

IISがPHPコードを処理できるようにハンドラーマッピング設定をする

Default Web Siteに追加したPHPWebSiteをクリックして選択すると下図が出る。

上図に於いて、ハンドラーマッピングをダブルチェックすると下図が開く。

上図のように入力する。

末尾の名前「PHP_via_FastCGI」は好きな名前でも良いが、まあ、ネットの例でもこのような文字列が多く使われているのでワテもそうした。

*.php

FastCgiModule

D:\php-7.2.12-nts-Win32-VC15-x64\php-cgi.exe

PHP_via_FastCGI

入力したら[OK]をクリックすると下図が出る。

上図において[はい]をクリックすると完了だ。

下図のようにハンドラーマッピングが追加出来た。

これで、PHPWebSiteサイトを開いた場合には、IISがPHPプログラムを処理してくれる。

なお、今の場合は、PHPWebSiteサイトのハンドラーマッピングにPHPを追加したが、Default Web Siteに対して同じ操作を行えば、全てのWEBサイトでPHPが動くようになると思う。でもワテは試していない。

既定のドキュメントにPHPを追加する

PHPWebSiteの既定のドキュメントに

index.php

を追加する(下図)。

上図において[OK]をクリックすれば完了だ。

最後に、下図に示すようにDefault Web Siteを選択してWebサイトの再起動を実行する。

これでIIS関連の設定は終わりだ。

PHPの動作確認

VSCodeで先ほど作成した作業フォルダ

D:\002-PHPWebSite\php_test-001

にファイル

index.php

を追加する。

その中身を以下のように記述する。

<?php

phpinfo();

ファイルを保存したら、ブラウザーで

localhost/PHPWebSite\php_test-001

あるいは

localhost/PHPWebSite\php_test-001\index.php

を開く。

その結果、下図が表示されれば成功だ。

図 phpinfo()の実行結果が表示された

さて、ワテの場合は、ここまでは順調に来たのだが、何故か上の画面においてXDEBUGで検索しても見付からないのだ。

つまりXDEBUG拡張機能が読み込まれていないのだ。

あかんがな。

phpinfo()でXDebugが読み込まれていない場合

現在、PHPが読み込んでいるモジュールの一覧を表示してみた。

C:\Users\wate>php -m

PHP Warning: Failed loading Zend extension 'php_xdebug-2.7.0beta1-7.2-vc15-nts.dll' (tried: ./ext\php_xdebug-2.7.0beta1-7.2-vc15-nts.dll (%1 は有効な Win32 アプリケーションではありません。), ./ext\php_php_xdebug-2.7.0beta1-7.2-vc15-nts.dll.dll (指定されたモジュールが見つかりません。)) in Unknown on line 0
[PHP Modules]
bcmath
calendar
・・・
・・・

ワテの場合は、上でも説明したように、最初はXDEBUGのbeta版を使っていた。

その結果、上図のように、XDEBUGの読み込みに失敗して正しくロード出来ていないようだ。

それで、Xdebug 2.6.1に入れ替えた。

再びモジュール一覧を表示してみる。

C:\Users\wate>php -m
[PHP Modules]
bcmath
calendar
Core
ctype
date
dom
filter
hash
iconv
json
libxml
mbstring
mysqlnd
openssl
pcre
PDO
Phar
readline
Reflection
session
SimpleXML
SPL
standard
tokenizer
wddx
xdebug
xml
xmlreader
xmlwriter
zip
zlib
[Zend Modules]
Xdebug
C:\Users\wate>

その結果、無事にXdebugが読み込まれている。

なお、上の一覧リストにXdebugが二カ所にあるが、その理由は知らない。なんでかな?

それでもXDebugが読み込まれない、PHPの動作がおかしい場合の対策

以下のURLを開くと、phpinfo()の出力結果を元に何がおかしいのか判定してくれる。

https://xdebug.org/wizard.php

下図が開くので、空白の入力欄にphpinfo()の出力結果を貼り付ける。

ワテの場合は、下図に示すphpinfo()の出力画面を全選択してコピー。

それを下図にように貼り付けた。

そして、[Analysis my phpinfo() output]をクリックしたら下図に示す判定結果が表示された。

上図と同じ物を文字で書くと以下の通り。

Tailored Installation Instructions
Summary
• Xdebug installed: 2.7.0beta1
• Server API: CGI/FastCGI
• Windows: yes - Compiler: MS VC15 - Architecture: x64
• Zend Server: no
• PHP Version: 7.2.12
• Zend API nr: 320170718
• PHP API nr: 20170718
• Debug Build: no
• Thread Safe Build: no
• Configuration File Path: C:\WINDOWS
• Configuration File: D:\php-7.2.12-nts-Win32-VC15-x64\php.ini
• Extensions directory: .\ext
You're already running the latest Xdebug version
But here are the instructions anyway:
    1. Download php_xdebug-2.6.1-7.2-vc15-nts-x86_64.dll
    2. Move the downloaded file to .\ext
    3. Update D:\php-7.2.12-nts-Win32-VC15-x64\php.ini and change the line zend_extension = .\ext\php_xdebug-2.6.1-7.2-vc15-nts-x86_64.dll
    4. Restart the webserver
If you like Xdebug, and thinks it saves you time and money, please have a look at the donation page.

 

ちなみに、上図は、ワテが正しい

php_xdebug-2.6.1-7.2-vc15-nts-x86_64.dll

を使っているにもかかわらず、それと同じファイルをダウンロードして使えと出ている。

理由は知らない。

まあ、確かにこのバージョンを使えば上手く行ったので、診断結果自体は正しい。

 

ワテの場合は、ここに至るまでに、以下のファイルも試した。

php_xdebug-2.7.0beta1-7.2-vc15-nts.dll
php_xdebug-2.7.0beta1-7.2-vc15-nts-x86_64
php_xdebug-2.7.0beta1-7.3-vc15-nts-x86_64.dll

これらのXDEBUGファイルで上の判定を実行すると、同じく

php_xdebug-2.6.1-7.2-vc15-nts-x86_64.dll

を使えと出るので、ワテはその指示に従ってXdebug 2.6.1に入れ替えたのだ。

兎に角、正しくXDEBUGが読み込まれている場合には、php -mでもXDEBUGが表示されるし、あるいは、phpinfo()の出力画面にも下図のようにXDEBUG関連の文字列が登場する。

と言う事で、ここまで来ればPHPのインストールとXDEBUGのインストールが完了だ。

VSCodeでPHPをXDEBUGする

早速PHPコードをデバッグしてみる。

index.phpを以下のように書き換える。

<?php

//phpinfo();

$a=1;

$b=2;

$c=$a+$b;

echo '$c='.$c;

ファイルを上書き保存しておく。

次に、下図に示すようにデバッグの構成の追加を開く。

下図に示す構成の選択が出るのでPHPを選ぶ。

そうすると、自動的にlaunch.jsonと言うファイルが作られた。

D:\002-PHPWebSite\.vscode\launch.json

その中身は以下の通り。

{
    // IntelliSense を使用して利用可能な属性を学べます。
    // 既存の属性の説明をホバーして表示します。
    // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "port": 9000
        },
        {
            "name": "Launch currently open script",
            "type": "php",
            "request": "launch",
            "program": "${file}",
            "cwd": "${fileDirname}",
            "port": 9000
        }
    ]
}

その画面キャプチャは以下の通り。

さて、

"Listen for XDebug"

"Launch currently open script"

と言う二つの設定が追加されたのだが、違いが良く分からないが次に進もう。

デバッガーを使ってWEBサイトのPHPコードをデバッグする

下図に示すように①デバッガーを表示する。

PHPコードの適当な位置にブレークポイントを置く②

デバッグでListen for XDebugを選んで▶(デバッグ開始)をクリック③

そうすると、下図に示すようにデバッガーが起動して、待機している状態になる。

 

ここで、ブラウザーで更新ボタン(あるいはCTRL+F5)をクリックする(下図)。

その結果、タスクバーのVSCodeが反応すれば成功だ(下図)。

VSCodeウインドウを開いてみると、ブレークポイントで停止していれば成功だ(下図)。

あとは、ステップ実行しても良いし、一気に実行しても良い。

必要なら、マウスを変数$cの上に持って行けば、3と表示されるだろう。

ブレークを解除して継続すると、WEBページに以下のように表示される。

無事にechoの出力がページに表示された。

まとめ

当記事では、Windows10(x64)の環境で、

IIS

VSCode

PHP7.2

XDEBUG

の組み合わせでPHPコードをデバッグする為の環境整備の仕方を解説した。

順調に行けば30分くらいで作業が完了すると思うが、ワテの場合はXDEBUGのどれを使ったら良いのか分からずに試行錯誤して2時間くらい掛かった。

また、IISでPHPのハンドラーマッピングを設定する作業に関しては、以前、Visual Studio を使ってWindows VPSに対してPHPサイト構築のテストをした経験が有ったので、それを思い出しながらやったので順調に行った。

と言う事で、無事にPHPをデバッグする環境が整った。

今後の予定としては、以下の設定を予定している。

PHPでWEBサイトを作成し、Linuxサーバーに発行する

Linuxサーバーに発行したWEBサイトのPHPコードをXDEBUGでリモートデバッグする

などか。

そこまで出来れば、VSCodeを使ってPHPサイトを作成する快適な作業環境が整う。

本を読む

どれも人気のあるPHP教科書だ。

その中でも、この三番目の本は、評価が高い。

アマゾンのレビューを見ると、絶賛されているぞ。

phpの基礎だけでなく
WEB開発の基礎に関しても
記述されている
phpの入門書として
ベストだと思います

PHPの教科書と謳っているが、単なるプログラムの解説書ではなく、
インターネットやサーバの知識、その周辺情報をも掲載している。

可愛らしいイラストを交えて親切丁寧に解説してあり、非常に分かりやすい。

とりあえず超初心者がこれからPHPという言語でWebプログラムを作るために
最適な1冊だと思われる。

ワテも買ってみるかな。

コメント募集

この記事に関して何か質問とか補足など有りましたら、このページ下部にあるコメント欄からお知らせ下さい。

 

PHPVSCode
スポンサーリンク
warekoをフォローする
スポンサーリンク
われこ われこ

コメント