PHP
xdebug

PHPのビルトインサーバ機能を使ったサーバに、XDebugが入らなかった話

たぶんそうそう引っかかることはないのでしょうが、こういうケースもあると思うのでメモ書きに。

ChocolateyでインストールしたPHP(Version 7.2.7)にXDebugをインストールしようとしたら、入らなかった話です。

2018/07/13追記:解決しました

Chocolateyでインストールすると、初期状態で非スレッドセーフ版がインストールされてしまう というのが原因でした。
なので、ChocolateyでPHPをインストールするときは、以下のコマンドを使うようにします。

> choco install --params '"/ThreadSafe "' php

これで、「試した手順」の通りの手順でデバッグ実行ができるようになります。

もうすでに非スレッドセーフ版をChocolatyでインストールしていた場合、`choco uninstall phpだけではアンインストールできない場合がありますので、その場合は以下の通りにして既にインストールしたPHPを削除します。

> choco uninstall -y php -n

コマンド実行後、エクスプローラーからC:\tools\php72をフォルダごと削除します

試した手順(うごかないほう)

  • https://xdebug.org/download.php よりXDebugをダウンロード。2018/07/13現在2.7.0alpha1
  • C:\tools\php72\extにダウンロードしたファイルを配置し、Ctrl+右クリックよりフルパスをコピーしておく
  • C:\tools\php72\php.iniを開き、一番下の行に以下を追加
[XDebug]
zend_extension = "(さっきコピーしたフルパス)"
xdebug.profiler_append = 0
xdebug.profiler_enable = 1
xdebug.profiler_enable_trigger = 0
xdebug.profiler_output_dir = "(適当なフォルダパス)"
xdebug.profiler_output_name = "cachegrind.out.%t-%s"
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_handler = "dbgp"
xdebug.remote_host = "127.0.0.1"
xdebug.remote_port = 9000
xdebug.auto_trace = 1
xdebug.trace_output_dir = "(適当なフォルダパス)"
xdebug.idekey = "phpstorm"

ここまででインストールは完了のハズですが、php -vコマンドを実行するとfailed loadingと表示される。

原因

不明。おそらくPHPのバージョン7.2.7か、64bit版が動かなかったものと思われます(XDebugのバージョンを変えてもダメでした)。

やり直した結果(大丈夫だった方)

早い話、XAMPPで入れた方は大丈夫でした(自分がインストールしていたバージョンでは、コントロールパネルバージョン3.2.2/PHPバージョン7.2.4 32bit版)

  • https://www.apachefriends.org/jp/index.html より、XAMPPをダウンロード
  • c:\xampp\php\extにXDebugの32bit版DLLをダウンロードしてコピーする(上記リンクからダウンロードできるXAMPP内のPHPが32bit版のため)
  • c:\xampp\php\php.iniに上記の通りのコードを追加
  • XAMPPのコントロールパネルでApacheを起動

デバッグ方法は、https://qiita.com/dz_/items/fb574782f4b4b30149a8 などを参考に(わたしの環境ではserverSourceRootとlocalSourceRootは不要でした)。

そして、PHPコードにブレークポイントを設置したあと、VSCode側で「デバッグを開始」、ブラウザ側でページを読み込もうとすると…。

image.png

ほら動いた。

XAMPPはC:\xampp\htdocs\配下にファイルを置くようになっているので、「ファイルの移動がめんどくさい!」という方は、リンク作成シェル拡張などを使ってシンボリックリンクなどを作ってしまうといいのではないでしょうか。

結論

どうしても構成が間違ってないハズなのにXDebugが読み込まれない・failed loadingが出る ということであれば、PHPのバージョンを疑ってみるといいでしょう。

XAMPPが入っていると、通常どおりにインストールしたPHPとは別のPHPが動作することになるので、そちらを試すのもよいと思います。

検証用にわざと古いXAMPPをとっておくのもよいかもしれません。