mac > install xdebug

# mac > install xdebug

## 筆者のmac環境
macOS 10.14.5
php 7.1.23
phpize, autoconf, tarはインストール済み

## PHP インストール状態確認
`php -v` でインストールされていることを確認
なければ、[phpの公式ページ](https://www.php.net/downloads.php)からダウンロードする

## PHP.iniからxdebugのインストール方法を調べる
`php -i > phpinfo.txt` でphp.iniに書かれている情報を書き出す
[XDEBUG EXTENSION FOR PHP](https://xdebug.org/wizard.php)というphp.iniからxdebugのインストール状態を教えてくれるサイトにコピペする
インストール手順が表示され、書かれた内容をもとにインストールを進める

## xdebugをダウンロードし、解凍する
インストールされたPHPのバージョンに合わせてxdebug(tar形式)をダウンロードする
ダウンロードされたディレクトリでファイルを解凍してもいいが、管理しやすくするためにホームディレクトリで解凍することをおすすめする

```
cd ~
mkdir xdebug

mv ~/Download/[ダウンロードしたxdebugファイル] ~/xdebug/

cd xdebug
tar -xvzf [ダウンロードしたxdebugファイル]
```

## phpのextensionに拡張モジュール(xdebug)を追加する
`phpize` というコマンドを使ってphpにxdebugを追加する準備をする

```
cd [ダウンロードしたxdebugファイル名]
phpize
```

環境によっては以下のエラーが発生し、正常にxdebugの準備ができない場合がある

```
grep: /usr/include/php/main/php.h: No such file or directory
grep: /usr/include/php/Zend/zend_modules.h: No such file or directory
grep: /usr/include/php/Zend/zend_extensions.h: No such file or directory
Configuring for:
PHP Api Version:
Zend Module Api No:
Zend Extension Api No:
```

この場合、`Xcode commandline tools` がインストールされていないことで `phpize` のアウトプットにミスが発生する可能性がある。
その時は以下のコマンドで `Xcode commandline tools` をインストールする

`xcode-select --install`

しかし、`Xcode commandline tools` がすでにインストールされているのに上記のエラーが発生している場合は、 `Xcode commandline tools` を強制的に再度インストールしてみる

`sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /`

※macOSのバージョンによってはpkg名が異なる場合があるので、各自のmacOSバージョンを確認してコマンド内容を変更する

`phpize` を実行すると正常に処理が終わる場合は以下のようなメッセージが表示される

```
ex)
phpize
Configuring for:
PHP Api Version:         20160303
Zend Module Api No:      20160303
Zend Extension Api No:   320160303
```

後は、xdebugのconfigureとビルドをすることで準備が終わる

```
./configure
make
```

## xdebugをphp/extensions配下に置く
xdebugのビルドが終わると、phpの拡張機能として使える状態にする
しかし、 `OS X 10.11` からmacのSIP(System Integrity Protection)によりシステムファイルを直接いじったり、変更したりすることが難しくなった
そこで SIP状態を一度無効にしてビルドした `xdebug.so` を `php/extensions` 配下に置くことも可能だけど、 `/usr/local` 配下に `php/extensions` を設けることでユーザが扱えるファイルシステム下に置くことで安全（？）にxdebugが使える状態とする

```
sudo mkdir -p /usr/local/php/extensions
sudo cp modules/xdebug.so /usr/local/php/extensions/
```

## php.iniの設定を修正する
xdebugをphpの拡張モジュールとして使える状態にしたので、その設定情報がphpから読み込めるように `php.ini` を修正する
環境によっては `php.ini` ではなく、 `php.ini.default` がデフォルトのセットになっている場合もあるので、一度確認をしてから `php.ini` を修正する

```
php --ini
Configuration File (php.ini) Path: /etc <- php.iniもしくはphp.ini.defaultがあるパス
Loaded Configuration File:         /etc/php.ini <- 環境によっては(none)になっている可能性もある
Scan for additional .ini files in: (none)
Additional .ini files parsed:      (none)

cd /etc
ls -la  | grep php.ini
-r--r--r--    1 root  wheel   71484  6 19 17:51 php.ini
-r--r--r--    1 root  wheel   71175  8 18  2018 php.ini.default

# php.ini.defaultしかない場合は以下のコマンドでphp.iniを作る
cp php.ini.default php.ini
```

`php.ini` に `xdebug.so` のパスを追加する
追加するパスは `XDEBUG EXTENSION FOR PHP` で `php.ini` の情報をコピペした際に表示されているものを使う

```
# php.iniに追加

ex)
[xdebug]
zend_extension=/usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so
```

## xdebugが使えることを確認する
これにより、macのphpからxdebugが使える状態になったので、php.iniの情報が更新されていることを確認する

```
php -i | grep xdebug

# 以下の記述があればOK
xdebug
xdebug support => enabled
```

もしくは、phpのバージョンを確認して以下のような記述があればOK

```
ex)
php -version
PHP 7.1.23 (cli) (built: Feb 22 2019 22:19:32) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
    with Xdebug v2.5.5, Copyright (c) 2002-2017, by Derick Rethans
```

## 参考ページ
[Xdebug for Mac OS X PHP](https://jimfrenette.com/2018/12/xdebug-for-mac-os-x-php/)
[Xdebug on macOS 10.13 with PHP 7](https://stackoverflow.com/questions/46593880/xdebug-on-macos-10-13-with-php-7)