Дебажим PHP-контейнер с помощью Xdebug и PhpStorm

Автор оригинала: Igor Fomin
  • Перевод
Перевод статьи подготовлен в преддверии старта курса «Backend-разработчик на PHP».





Инструкция Docker #9: xdebug

Я создам очень простую php-страницу и подебажу ее с помощью xdebug и PhpStorm.

Исходные файлы можно найти здесь:
github.com/ikknd/docker-study в папке recipe-09

1. Создайте файл «Dockerfile» в папке «docker»:

FROM php:7.2-fpm

#Install xdebug
RUN pecl install xdebug-2.6.1 && docker-php-ext-enable xdebug

CMD ["php-fpm"]

Выполните эту команду из папки docker для создания образа:

docker build -t php-xdebug-custom -f Dockerfile .

2. Создайте файл docker-compose.yml в папке «docker»:

version: "3.7"

services:

  web:
    image: nginx:1.17
    ports:
      - 80:80
    volumes:
      - /var/www/docker-study.loc/recipe-09/php:/var/www/myapp
      - /var/www/docker-study.loc/recipe-09/docker/site.conf:/etc/nginx/conf.d/site.conf
    depends_on:
      - php

  php:
    image: php-xdebug-custom
    volumes:
      - /var/www/docker-study.loc/recipe-09/php:/var/www/myapp
      - /var/www/docker-study.loc/recipe-09/docker/php.ini:/usr/local/etc/php/php.ini

Здесь я использую образ «php-xdebug-custom» вместо «php:7.2-fpm „

3. Внесите в файл php.ini следующие настройки:

[xdebug]
zend_extension=xdebug.so
xdebug.profiler_enable=1
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=host.docker.internal
xdebug.remote_port=9000
xdebug.remote_autostart=1
xdebug.remote_connect_back=1
xdebug.idekey=PHPSTORM

4. Настройте сервер в PhpStorm:

File -> Settings -> Languages и Frameworks -> PHP -> Servers
Добавьте новый сервер с помощью иконки + и настройте его, как показано на следующем скриншоте:



Убедитесь, что вы отметили «Использовать сопоставление путей» (“Use path mappings») и сопоставили папку php с /var/www/myapp.

5. Настройте удаленный дебагер PHP в PhpStorm:

Run -> Edit configurations -> PHP Remote Debug

Добавьте новую конфигурацию и присвойте ей значения, как на следующем скриншоте:



6. Выберите конфигурацию дебага на панели дебага PhpStorm



7. Перейдите в /var/www/docker-study.loc/recipe-09/docker/ и выполните:

docker-compose up -d

Если я сейчас введу myapp.loc/ в браузере, я увижу результаты из файла index.php.

Я могу установить точку останова, начать прослушивание соединений в панели дебага PhpStorm и перезагрузить страницу.

Удачного дебага!



Узнать о курсе подробнее.



Еще по теме


OTUS. Онлайн-образование
Цифровые навыки от ведущих экспертов

Комментарии 3

    0
    Странно, php.ini вроде как есть в файлах проекта, но зачем-то нужно его править вручную.
      0
      xdebug.remote_host=host.docker.internal

      Это не будет работать на линуксе, только на маке и винде (https://github.com/docker/for-linux/issues/264).
      Можно это исправить с помощью директивы extra_hosts, подробнее здесь.

        0
        Я бы даже осмелился предположить, что данная опция вообще не нужна при remote_connect_back = 1

      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

      Самое читаемое