Xdebugを使う(Windows)
XdebugをWindowsで使うには、パスの問題があり、少しややこしい。
自分なりの方法が見出せたので、一応記録しておく。
(1) Xdebugのインストール
1.1 PHPの設定情報を調べる。
次のファイルをたとえばドキュメントルートに作成し、ブラウザでアクセスする。
phpinfo.php
<?php
phpinfo();
たとえば、次のようにアクセスする。
http://localhost/phpinfo.php
ここで表示された内容を”すべて選択”し、コピーしておく。
1.2 https://xdebug.org/wizard に貼り付ける。
https://xdebug.org/wizard を開くと、四角い領域があるので、
その中に貼り付け、その下の “Analyse my phpinfo() output” ボタンを
クリックする。

すると、”Instructions” という内容が表示されるので、だいたいその内容に
沿ってインストールする。
1.3 dllファイルをダウンロードする。
たとえば “php_xdebug-3.4.2-8.2-ts-vs16-x86_64.dll” のようなファイル名が
表示されるので、そのファイル名をクリックすることでダウンロードされる。
1.4 ファイル名を変更する。
ダウンロードしたファイルを c:\xampp\php\ext に移動して、ファイル名を
“php_xdebug.dll” とする。
1.5 php.ini に記述する。
“c:\xampp\php\php.ini” を開き、末尾に以下の内容を記述する。
[Xdebug]
zend_extension=xdebug
xdebug.mode=develop,debug
xdebug.start_with_request=yes
xdebug.log="C:\xampp\php\log\xdebug.log"
xdebug.log_level=3
- xdebug.mode=develop
- var_dump()の出力がていねいになる。
- xdebug.mode=debug
- デバッグ時にコードを1行ずつ実行できるようになる。
- xdebug.log=”C:\xampp\php\log\xdebug.log”
- これを指定すると、画面に出力される警告が、このログファイルに記録されるようになる。警告が画面に出力されるのが、ちょっと邪魔になるからである。
ただし “C:\xampp\php” フォルダに “log” フォルダを作成しておく必要がある。
- これを指定すると、画面に出力される警告が、このログファイルに記録されるようになる。警告が画面に出力されるのが、ちょっと邪魔になるからである。
- xdebug.log_level=3
- これは、警告を出力に含めるという指定である。
1.6 Apacheを再起動する。
(2) VScodeの設定
2.1 拡張機能 “PHP Debug” をインストールする。
“xdebug.org”作 の “PHP Debug” をインストールする。
PHP Debug
Xdebug xdebug.org
Debug supports for PHP with Xdebug
2.2 launch.json を作成する。
VScode左端の”実行とデバッグ” を選択すると、VScode左上に “実行とデバッグ” ボタンが表示されるので、その下の “launch.jsonファイルを作成します” をクリックする。

自動で “launch.json” が作成されるが、一部を修正する。
launch.json
{
// IntelliSense を使用して利用可能な属性を学べます。
// 既存の属性の説明をホバーして表示します。
// 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003
},
{
"name": "Launch currently open script",
"type": "php",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}",
"port": 0,
"runtimeArgs": [
"-dxdebug.start_with_request=yes"
],
"env": {
"XDEBUG_MODE": "debug,develop",
"XDEBUG_CONFIG": "client_port=${port}"
}
},
{
"name": "Launch Built-in web server",
"type": "php",
"request": "launch",
"runtimeArgs": [
"-dxdebug.mode=debug",
"-dxdebug.start_with_request=yes",
"-S",
"localhost:0"
],
"program": "",
"cwd": "${workspaceRoot}",
"port": 9003,
"serverReadyAction": {
"pattern": "Development Server \\(http://localhost:([0-9]+)\\) started",
"uriFormat": "http://localhost:%s/${relativeFile}",
"action": "openExternally"
}
}
]
}
3つめの “Launch Built-in web server” の項目の “uriFormat” の部分を次のように修正する。
"uriFormat": "http://localhost:%s/${relativeFile}",
“http://localhost:%s/” だと、ドキュメントルートの index.php しか動作しなくなる。
“http://localhost:%s/${relativeFile}” とすることで、たとえば、
http://localhost:8000/abc/def.php のようなフォルダを含んだファイルでも
動作させることができるようになる。
ただし、これは、Mac や Linux についてのみ言えることで、
Windowsの場合は、パス区切りが “\” であるため、うまくいかない。
2.3 Windowsの場合の launch.json の uriFormat
Windowsの場合は、”\” をパス区切りだと認識させるための VSCode拡張機能を
インストールする必要がある。
2.3.1 拡張機能 Command Variable をインストールする。
Command Variable をインストールすることで、”\” をパス区切りとしてVSCodeに
伝えることができるようになる。
2.3.2 uriFormatの記述
launch.json の uriFormat の部分を次のようにする。
"uriFormat": "http://localhost:$s/${command:extension.commandvariable.file.relativeFilePosix}",
これにより、VSCodeで開いたphpファイルを動作させることができる。
3 launch.json を造るたびにこれを書くのは面倒くさい。
拡張機能 ComandVariable をインストールしなくてはならないし、”uriFormat” を
書くのも面倒くさい。
これならば、”実行とデバッグ” の “Launch Build-in web server” を使うのはやめて、”Listen for Xdebug” を使うほうが楽チンな気がする。
“Listen for Xdebug” を選択して、実行ボタンをクリックしたのち、実行したいファウルを表示して、PHPサーバーの”Reload Serber” を選択すれば問題ない。
カテゴリー: memo, php, エディタ
タグ: CommandVariable, launch.json, Xdebug, パス問題
カウント: 27
My開発メモ