XAMPP なしで、Windows の Visual Studio Code を使って PHP デバッグしてみる


XAMPPを入れれば簡単に実現できますが、タイトルとおり「Webサーバなしで」あえてローカル PHP だけインストールして Visual Studio Code(以下 VSCode)で PHP を実行&デバッグしてみます。※XAMPPが嫌いな訳ではない

お約束の微妙にはまる点があったので自分メモ用に残しておきます。

動作環境

  • Windows 8/10
  • Visual Studio Code 1.43.1 ※インストール済みであること
  • PHP 7.4.4 (VC15 x64 Thread Safe / php-7.4.4-Win32-vc15-x64.zip)

PHP のインストール

https://windows.php.net/download#php-7.4 から Thread Safe 版をダウンロードして任意のディレクトリに展開しておく。(ここでは C:\php7 にインストールしてみてます)

Windowsの環境変数に C:\php7 を追加して黒い画面で php -v を叩いてみる。

と…下記が表示されなければ、いいのだが…

PHP Warning:  'vcruntime140.dll' 14.0 is not compatible with this PHP build linked with 14.16 in Unknown on line 0

表示された場合は、「Visual Studio 2019 の Microsoft Visual C++ 再頒布可能パッケージ」をインストールすると解消します。

ダウンロード先は、ここ からですが判りづらい。下までスクロールして「その他のツールとフレームワーク」をクリックすると、ランタイムライブラリのダウンロードが項目あります。

PHPデバッグツール「XDebug」のインストール

PHPのバージョンに合わせた形で XDebugがあるようですのでそのインストール手順。

手順1
C:\PHP7 の下にある php.ini-productionphp.ini にコピーする。

手順2
黒い画面で以下のコマンドを実行する。クリップボードに結果がコピーされます。

C:\> php -i | clip

https://xdebug.org/wizard サイトに結果を貼り付け "Analyse my phpinfo output" ボタンを押下する。

上記の Instructions に従い xdebug の DLL をダウンロードし C:/php7/ext 以下に配置する。

手順3
php.ini の先頭に下記をコピペする。上記の Instructions で指示されている zend_extension パスは指定されたとおりに記述すると間違っているので、DLL を配置したパスをちゃんと記述する。

zend_extension = C:\php7\ext\php_xdebug-2.9.3-7.4-vc15-x86_64.dll
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_host = 127.0.0.1
xdebug.remote_port = 9000

黒い窓で php -v と実行してみて下記の Warning(warn なのに Failed …) が表示されていなければOK。

PHP Warning: Failed to load C:/php/ext/php_xdebug-2.9.3-7.4-vc15-x86_64.dll, 指定されたファイルが見つかりません。

VSCode拡張機能 PHP Debug のインストール

左バーの拡張機能で 「PHP Debug」、「PHP IntelliSense」をインストールする。

デバックしてみる

適当な phpプログラムを表示し。左バーの実行を押下し "To customize Run and Debug create a launch.json" のリンクを踏む。プルダウンから「PHP」を選択する。

launch.json は、以下の様に1行追加する。"name": "Listen for XDebug" は消しても問題ない。

{
    "name": "Launch currently open script",
    "type": "php",
    "request": "launch",
    "program": "${file}",
    "cwd": "${fileDirname}",
    "port": 9000,
    "runtimeExecutable": "C:\\php7\\php.exe"
}

デバッガーを起動しつつブレイクポイントを設定し "Listen for XDebug"を実行する。
うまくいった^^

参考サイト