【2023年10月版】PHP8.2にXdebugをインストールする(環境: Windows11×Apache2.4)

Windows11 Xdebugをインストール PHP PHP
※当サイトはアフィリエイト広告を掲載しています。

Windows11搭載の新しいPCを購入し、MySQL, Apache, PHPと順番にインストールしてきました。

これで最低限の環境が整った……かと言えば、まだ一つ足りていません。そう、Xdebugのインストールです。

Xdebugを入れなければPHPの開発体験はまったく駄目駄目になる、といっても過言ではないほど私にとっては重要だからです。

Lara
Lara

Laravelとかフレームワークしか使わないなら別ですが、素のPHPも良く使うからです。

ただ、Xdebugは過去にうまくインストールできず、あれこれと試行錯誤した経験もあります。

ちょっとおっくうに感じていましたが、避けて通れない……というわけで、本ページではXdebugをインストールしたいと思います。

結論としては前回の解決方法を覚えていて、あっさりとインストールできました。

今回の私の環境

今回は、以下の環境でXdebugをインストールします。

  • OS: Windows11 64bit
  • PHP: 8.2.11(インストール先→ C:\php82)
  • Apache2.4.57

とは言えPHPやWindowsのバージョンに無関係でインストールする方法を選択します。

ですので現在PHPが動作していれば、このあたりは重要ではありません。

「ああ、ウィンドウズ環境にXdebug入れるんだなぁ」くらいに認識しておいていただければそれでOKです。

ダウンロード

まずはXdbugをダウンロードします。

ダウンロード

こちらにWindowsのダウンロードページがあります。

……が、ここで自分にあったXdebugを選べる人は、そもそも本ページを見る必要すら無いのではないでしょうか。

ちなみに、私はPHP8.2のThread Safe版を利用しています。なので執筆時の安定版であるXdebug 3.2.2の、PHP8.2 VS16 TS(64bit)を落とせばOKです。

Windows用のXdebugダウンロードページ

……が、いろいろな環境の方がいると思いますし、選ぶのが難しいですよね。

異なる物を落としてもエラーになってしまいますし(←さんざん経験済み)。

ですのでここでは万人に優しい方法を用いてダウンロードします。

PHPにパスが通っている場合

PHPにパスが通っている場合は、PowerShellかコマンドプロンプトで以下のコマンドを打ちます。

php -i

すると、以下の様にPHPの情報がずらっと出てきますので、一式を選択し、Ctrl+Cでコピーします。

コマンドラインで、php -iの実行結果をコピー

PHPにパスが通っていない場合

もしもPHPにパスが通っていない場合は、異なる手段を採ります。

以下のファイルを用意し、http://localhost/などでアクセスできる場所にindex.php等として置いてください。

<?php
phpinfo();

ブラウザからアクセスすると、phpinfo()によるPHPの情報が表示されます。

その画面でCtrl+Aで文字を全て選択し、Ctrl+Cでコピーしてください。

phpinfo()の結果を全てコピー

上記ページのHTMLソースコードをコピーしても、どちらでもOKです。

Xdebugのウィザードに貼り付け

コピーしたPHPの情報を、Xdebugのインストールウィザードページに貼り付け、Analyse my phpinfo() outputボタンを押します。

phpinfo()の情報をペーストして実行

適したファイルのダウンロード

すると自分の環境を解析してくれ、相応しいXdebugを提示してくれます。すごい!

適したXdebugをダウンロード

ここでは赤枠のphp_xdebug-3.2.2-8.2-vs16-x86_64.dllをクリックしてダウンロードします。

Lara
Lara

親切にインストール方法一式まで書いてくれていますね。

ちなみに、ブラウザがセキュリティの気を利かせてくれ、ダウンロードがうまくできないケースがあります。

ブラウザのダウンロード一覧画面(ChromeならCtrl+J)などから、保存を進めてください。

警告が出る場合もある

インストール

インストール、というよりはPHPから読み込みようなイメージです。

フォルダのリネーム

ダウンロードしたファイルの名称を、php_xdebug-3.2.2-8.2-vs16-x86_64.dllからphp_xdebug.dllに変更します。

php_xdebug.dllにリネーム

拡張フォルダに移動

次に、php_xdebug.dllをPHPの拡張を配置するフォルダに移動します。

特に変更していない場合、PHPインストールフォルダのextとなります。

具体的にはphp.iniのextension_dirに定義されています。

私の場合は、C:\php82\extの中に移動しました。余談ですが、他にもdllがたくさんあることが確認できます。

C:\php82\extの中に移動

php.iniの編集

次に、php.iniを編集し、php_xdebug.dllをPHPから読み込むようにします。

php.iniをテキストエディタで開いた後、以下のようにextensionまたは;extensionが並んだ場所を探します。

検索機能を使うと良いでしょう。私は1000行目ちょいにありました。

;extension=soap
;extension=sockets
;extension=sodium
;extension=sqlite3
;extension=tidy
;extension=xsl
;extension=zip

;zend_extension=opcache

※バージョンによっては多少違った記載になっているかもしれませんが、それでかまいません。

ここではzend_extension=xdebugという文字列を追加するのが目的です。

ちょうど;zend_extension=opcacheというのが類似設定にありましたので、その後に追記しました。

以下の様な感じです。

;extension=soap
;extension=sockets
;extension=sodium
;extension=sqlite3
;extension=tidy
;extension=xsl
;extension=zip

;zend_extension=opcache
zend_extension=xdebug

これでPHPを起動させた際に、php_xdebug.dllを読み込む準備が整いました。

動作確認

まだインストールに成功しているかは分からないので、Apacheで動作を確認します。

※Apacheを再起動させていない状態=まだXdebugのインストールが反映されていない状態です。

間違ったファイルを用意

検証用に、エラーを発生させるためのファイルを用意しましょう。

以下のコードを、http://localhost/などでアクセスできるように用意します。

<?php

function deepFunction1($value) {
    // Xdebugの改良されたvar_dump()のデモ
    var_dump($value);
    return deepFunction2($value);
}

function deepFunction2($value) {
    return deepFunction3($value);
}

function deepFunction3($value) {
    return deepFunction4($value);
}

function deepFunction4($value) {
    // ここで意図的に未定義の関数を呼び出しエラーを発生させます。
    return undefinedFunction($value);
}

// エントリポイント
deepFunction1("Hello, Xdebug!");

before

先ほどのファイルにブラウザからアクセスすると、以下のようなエラーになります。

PHPのデフォルトのエラー表示
Lara
Lara

これでPHPの開発するのはめっちゃ辛い……

再起動

after(Xdebugの反映)を見るため、php.iniの設定を再読込する必要があります。

そのためにはApacheを再起動します。

Apacheを再起動する

もちろん、まだ起動していなければスタートでOKです。

after

Xdebugの最低限のインストールが出来ていれば、エラーメッセージが変わります。

もう一度、先ほどのファイルにアクセスしてみます。

Xdebugを使うとエラーが見やすくなる

var_dump()が整えられて見やすくなったのと、プログラムの処理の流れが見やすくなりました。

これだけでもずいぶん開発体験が向上すると思います。

まとめ

以上、Xdebugの最低限のインストールを行いました。

Xdebugはこれだけではなく、オプションを工夫したり、VSCodeなどと連携してより便利に使うことも可能です。

インストールするだけでも充分なメリットと言えますが、必要に応じていろいろと使ってみると良いかもしれません。

コメント

タイトルとURLをコピーしました