My開発メモ

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

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, パス問題

カウント: 28