XAMPPでXdebugが有効にならずERR_CONNECTION_RESETが出る


XAMPPでXdebugが有効にならず、ERR_CONNECTION_RESETが出た

概要

php5の開発時にはXdebugが有効だったが、php7だと有効にならずERR_CONNECTION_RESETが出た。
php5とは異なる設定を行うことで、php7でもXdebugを使うことができるようになった。
php5だとバージョンに合ったXdebugを探してダウンロードすれば良い。php7の場合、同様の手順では上手くいかないが、もともとXAMPPパッケージ内に準備されているDLLを指定すればOKだった。

開発環境

Windows: Windows 10 Home
Visual Studio Code: ver.1.43.1

php5のとき

XAMPP: ver.5.6.40 (php ver.5.6.40)
Xdebug: php_xdebug-2.5.5-5.6-vc11-x86_64.dll

php7のとき

XAMPP: ver.7.3.15 (php ver.7.3.15)
Xdebug: php_xdebug.dll(パッケージ内にあるもの)

Xdebugを動かすための前準備

  • XAMPPのインストール
  • ApacheのListenポートを設定
  • ApacheのDocumentRootを開発リポジトリに合わせて設定
  • Apacheのhttpd-xampp.confを修正し、リポジトリのDirectoryへの操作権限を追加
  • Visual Studio CodeにPHP Debugを追加
  • Visual Studio Codeでlaunch.jsonを設定

php5のとき

まずphpinfo()をコードに書いてXAMPPのApache上で実行し、PHP情報を表示する。下記の例ではApacheのDocumentRootを~\public\life-planning\に設定してある。その直下にあるtop.phpにphpinfho()を書く。

例としてApacheのListenポートを9480にしている場合なら、上記top.phpを開くには、ブラウザのURLをlocalhost:9480/top.phpにする。
PHP情報が表示されたら、全体の文字を選択して、コピーする。

Xdebugインストールウイザード を開いてテキストボックスに貼り付け、Analyse my phpinfo() outputをクリックすると、使うべきXdebugバージョンを教えてくれる。

そのバージョンをダウンロードし、xampp\php\extフォルダに貼り付ける。php.iniにzend_extentionを追記する。例として以下の場合XAMPPのインストール先はD:\Pgm\xampp\となっている。

php.ini
zend_extension = D:\Pgm\xampp\php\ext\php_xdebug-2.5.5-5.6-vc11-x86_64.dll
[xdebug]
xdebug.default_enable = 1
xdebug.idekey = "vscode"
xdebug.remote_enable = 1
xdebug.remote_port=9000
xdebug.remote_autostart=1

Visual Studio Code上にブレークポイントを設定しF5を押してデバッグ実行を開始する。ブラウザからwebページを開くと、ブレークポイント上で実行が中断されてデバッグ実行ができるようになる。

php7のとき(うまく動かなかったやり方)

php5のときと同様に Xdebugインストールウイザード でxdebugバージョンを解析すると、php_xdebug-2.9.3-7.3-vc15-x86_64.dllと出た。同ファイルをダウンロードしてextフォルダに貼り付けた。php.iniのzend_extentionを指定した。

php.ini
zend_extension = D:\Pgm\xampp\php\ext\php_xdebug-2.9.3-7.3-vc15-x86_64.dll.dll
[xdebug]
xdebug.default_enable = 1
xdebug.idekey = "vscode"
xdebug.remote_enable = 1
xdebug.remote_port=9000
xdebug.remote_autostart=1

ところが、Apacheが沈黙してしまう。このサイトにアクセスできません、ERR_CONNECTION_RESETのエラーが出ている。

いろいろ試してみたところ、XdebugのDLLファイル名を存在しない名称に書き替えたらXdebug無しのまま応答してくれる。なので、設定エラーではなく、DLL側に組み合わせの問題があるのかなという気がする。しかし Xdebugインストールウイザード で選ばれた組み合わせに問題があるとすれば、どうしてよいやら。

XAMPP全体をアンインストールして再インストールしたが、同じ問題が起こり解決しなかった。ブラウザのキャッシュをクリアしたり、OS再起動したりしても解決しない。

php7のとき(解決したやり方)

extフォルダ内に、バージョン名がない無印の名称のphp_xdebug.dllというファイルが存在する。php5のときもあったが、気にしていなかった。上記問題の対応策を探っていたところ、この無印バージョンを指定したら、Xdebugが使えるようになった。

php.ini
zend_extension = D:\Pgm\xampp\php\ext\php_xdebug.dll
[xdebug]
xdebug.default_enable = 1
xdebug.idekey = "vscode"
xdebug.remote_enable = 1
xdebug.remote_port=9000
xdebug.remote_autostart=1

Xdebugが有効になったことを確認するためには、Visual Studio Codeのブレークポイントを使っても良いし、phpinfo()を表示して、下の方にxdebugの項目が表示されていることを確認しても良い。

課題

Xdebugが有効になったので問題は解決だが、無印の名称のDLLだと他の問題がないのかどうか未調査。また、なぜ Xdebugインストールウイザード で指定されたバージョンが有効にならなかったのかは、いまだ不明。