LoginSignup
4
3

More than 3 years have passed since last update.

【vscodeで xdebug 3.0 × PHP × Docker】

Last updated at Posted at 2021-01-15

【ディレクトリ構造】

.docker-practice
├── html
│   └─ arraypractice.php // デバックするファイル
├── php
│   ├── Dockerfile
│   └── php.ini
└── docker-compose.yml

【最終的なコードと設定】

docker-compose.yml

追記 versionを2.0 -> 3.8 にした。(特に書き方は変わらず、いくつかoptionがなくなっただけ)

docker-compose.yml
version: '3.8'
services:
    php:
     build: ./php
     ports:
        - '80:80'
     volumes:
        - ./html:/var/www/html
        - ./php/php.ini:/usr/local/etc/php/php.ini

phpディレクトリ内のDockerfile

( build: ./php にあたるファイル)

Dockerfile
FROM php:7.4-apache
# php.iniをdockerコンテナ内にコピって設置している
COPY php.ini /usr/local/etc/php/
# xdebugのinstallと設定に必要なzend_extensionを生成している
RUN pecl install xdebug \
  && docker-php-ext-enable xdebug
  # /usr/local/etc/php/conf.d/docker-php-ext-xdebug.iniに
  # zend_extension = ~ 出力される

php.iniにxdebug3.0の設定を追加
php.ini
[xdebug]
xdebug.mode=debug
xdebug.start_with_request = yes
; host.docker.internalはdockerのhostマシンのIPを解決してくれる。
xdebug.client_host=host.docker.internal
xdebug.client_port=9003

vscodeのlaunch.json

portはphp.iniのxdebug.client_portに合わせる
pathMappingsは、'dockerコンテナ側ルートディレクトリ' : 'vscode側ルートディレクトリ'の構成

launch.json
{
 "version": "0.2.0",
 "configurations": [
     {
      "name": "Listen for XDebug",
      "type": "php",
      "request": "launch",
      "port": 9003, 
      "pathMappings": {
         "/var/www/html": "${workspaceRoot}/html"
      }
     }
 ]
}

実行

./html直下のデバッグしたいファイルにブレークポイントをつけて、
緑の三角ボタンで実行するとvscodeの下の部分がオレンジになる。
その状態で、ブラウザでreloadすればbreakpointで止まってくれて、変数なんかもVARIABLESに表示される。
(21行目ではちゃんとksort後の$arrayが表示されている。)
800A6CDE-D918-45F0-A97C-D189623072C2.jpeg

【こういったコードになった経緯】

1,最初はdockerコンテナに入って、pecl install xdebug でxdebugをinstallしようとしたらphpのvarsionが7.2以上にするようにエラーが出たのでDockerfileのイメージを7.0→7.4にした。

2,とりあえずphpinfo()にxdebugの項目がでるようにしたかったが、
docker-php-ext-enable xdebugzend_extensin = ~ を作らないと表示されなかったので追加した。
また、buildしなおすたびにxdebugをinstallし直すのは面倒なのでDockerfileのRUNコマンドで実行できるようにした。

3,php.iniについては、 xdebug.start_with_request = yes がないとbreakpointで止まってくれなかった。

4,vscodeのlaunch.jsonは、pathMappingsは最初意味がわからず、
"./html" : "{workspaceRoot}" みたいにしてたが、dockerコンテナ側のルートディレクトリ : vscode側のワークスペースだとわかって変更。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3