brew php56-xdebug
が使えなくなっていたので、調べ直しました。
MacOSにははじめからapache2+php7.1がインストールされていますが、それを使った場合はうまくいきませんでした。そのため、nginx+php-fpmという組み合わせで動かします。
xdebugのインストールには、MacOSの場合pecl(pear)を使うことが推奨されていたため、そちらを利用します。
brew install php@7.2
pecl install xdebug
brew install nginx
この場合、設定ファイルは以下になります。
- php: /usr/local/etc/php/7.2/php.ini
- nginx: /usr/local/etc/nginx/nginx.conf
/usr/local/etc/php/7.2/php.ini
zend_extension="xdebug.so"
xdebug.remote_enable=1
xdebug.remote_autostart=1
xdebug.remote_port="9001"
xdebug.profiler_enable=0
xdebug.profiler_output_dir="/tmp"
xdebug.max_nesting_level=1000
xdebug.idekey = "PHPSTORM"
[PHP]
...
1行目に大胆にも設定が追加されています。その後ろにdebugの設定を追加します。VSCodeを使った場合、リモート接続として設定しなければ動作しませんでした。
続いて、nginxで.phpをphp-fpmに流すようにします。
/etc/nginx/etc/nginx/nginx.conf
http {
...
server {
listen 8080;
server_name localhost;
location / {
#root html;
root /Users/nnyn/Documents/vscode-debug-specs/php;
index index.html index.htm;
}
location ~ \.php$ {
root /Users/nnyn/Documents/vscode-debug-specs/php;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
#fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
include fastcgi_params;
}
}
}
これらをサービスとして起動します。
brew services start php@7.2
brew services start nginx
ログは以下に出力されます。
- php: /usr/local/var/log/php-fpm.log
- nginx: /usr/local/var/log/nginx/
phpinfo.php を置いて、http://localhost:8080/ にアクセスします。
phpinfo.php
<?php phpinfo(); ?>
xdebugの項目があれば正しくxdebugが組み込まれています。
あとは、VSCodeなど自分のエディタでデバッグ!
つまずいたところ
- phpが別の場所にもインストールされていて、xdebugをビルドした際にそちらを見ていた→
phpize
を実行し、目的のphpにパスが通っているか確認する。php@7.1はうまく行かず、php@7.2ではpeclがインストールされて、prcl経由でインストールできた。
VSCode側の設定