Полный цикл в digital

PHP Debug (PHP 7.3) в связке с Open Server

Эта инструкция подойдет если использовать PHP версии 7.3 или выше.

Тестирование будет показано на примере реализации простого REST API.

OpenServer подходит для обучения и реализации не сложных проектов, в остальном более правильно использовать ОС Linux с Docker контейнерами.

Подключение PHP интерпретатора в VSCode

В программе VSCode необходимо установить расширение PHP Intelephense из самой программы или открыть по ссылке PHP Intelephense - Visual Studio Marketplace

Откройте VSCode, слева внизу нажмите значок шестеренки настроек и выберети вкладку Параметры:

В строке поиска введите PHP, затем выберите секцию PHP и нажмите Изменить в settings.json

В параметре php.validate.executablePath пропишите путь до исполняемого файла нужной версии PHP

Должно получиться следудующие:

Настройка Xdebug в VSCode

В программе VSCode необходимо установить расширение PHP Debug из самой программы или открыть по ссылке PHP Debug - Visual Studio Marketplace

Убедитесь что в директории лежит файл openserver/modules/php/версия_php_openserver/ext/php_xdebug.dll.

Откройте настройки php.ini через меню OpenServer в правом нижнем углу экрана:

Найдите секцию [xdebug], закоментируйте все параметры где есть xdebug и напишите ниже секции [xdebug] следующий текст:

  1. zend_extension="%sprogdir%/modules/php/%phpdriver%/ext/php_xdebug.dll"
  2. xdebug.log="%sprogdir%/userdata/temp/xdebug/log/access.log"
  3. xdebug.mode = debug
  4. xdebug.client_host = 127.0.0.1
  5. xdebug.client_port = 9003
  6. xdebug.start_with_request=yes
  7. xdebug.idekey = VSCode
  8. xdebug.discover_client_host=false

После этого создайте по пути openserver/userdata/temp/xdebug/ директорию log и в ней создайте файл access.log

В программе VSCode нажмите на значок отладки слева, VSCode предложит создать файл настроек launch.json в директории .vscode нажмите создать файл и затем в выпадающем меню выберите PHP

После чего откроется файл launch.json со следующим содержимым, в данном файле необходимо убедится только в том что указан порт 9003:

Создайте файл с содержимым <? echo xdebug_info(); ?> и откройте его в браузере, если все сделано правильно то появится следующая страница. В указанном блоке не должно быть ошибок, если есть исправляем:

Перезапускаем OpenServer

В программе VSCode нажав на значок отладки слева, выберите в выпадающем меню Listen for Xdebug и нажмите значок пуск.

Поставьте у себя в коде точку останова и откройте файл через браузер или выполните запрос к своему URL в случае с REST API.

Полный вывод данных

При отладке из коробки возникает небольшая проблема, XDebug работает нормально, останавливается на точках останова данные доступны в переменных. При попытки посмотреть массив, доступно определенное количество элементов. Например, массив из 172 элементов будет отображать только 32 элемента.

По сути, XDebug можно настроить с помощью параметров, помещенных в файл php.ini. Среди опций есть та которая определяет глубину объекта для отображения в графическом интерфейсе:

xdebug.var_display_max_children

При отладке с помощью расширения PHP Debug эти параметры необходимо настроить в файле launch.json, содержащий настройки отладчика:

{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003,
"xdebugSettings": {
"max_children": 999,
}
}

Полные инструкции перечислены на этой странице.

Связка PHPStorm + XDebug + Docker

Ожидается, что у вас уже есть проект с настроенным докером.

Настраиваем интеграцию PHPStorm с Docker

Идём в Settings | Build, Execution, Deployment | Docker Файл | Настройки | Сборка, выполнение, развертывание | Docker и создаём максимально простую интеграцию через локальное приложение Docker:

Настраиваем выполнение скриптов через удалённый в контейнере интерпретатор:

Идём в Settings | PHP | CLI Interpreter | 3 точки справа от него Файл | Настройки | PHP | 3 точки справа от него и добавляем такую конфигурацию:

У меня не проходит валидация установленного пхп, но это ни на что не влияет.

  • Name может быть любым
  • Server выбираем тот, который создали шагом ранее
  • Configuration files: путь до docker-compose.yml

  • Service: контейнер с PHP

  • Остальное на ваш вкус, но в графе Lifecycle лучше оставить connect to existing container

Теперь, в графе CLI интепретатор вы увидите выбранным только что созданный конфиг:

Даём PHPStorm знать о том, как мы обращаемся к серверу

Идём в Settings | PHP | Servers Файл | Настройки | PHP | Серверы и добавляем новую конфигурацию сервера:

Порт берём из своего конфига сервера. В моём случае он поднят в отдельном контейнере и смотрит наружу через 80 порт.

Тут важно запомнить Name, это пригодится чуть позже.

Донастроим интеграцию PHPStorm с XDebug

Идём в Settings | PHP | Debug | XDebug Файл | Настройки | PHP | Отладка | XDebug и добавляем порт 9001:

Настроим конфигурацию запуска дебаггера

Идём в Run | Edit configurations Выполнить | Редактировать конфигурацию и создаём новую конфигурацию на основе PHP Remote Debug:

Здесь Server это как раз Name из пункта #3.

В этом окне Name может быть любым, надо его запомнить, он, опять же, пригодятся чуть позже.

IDE key может быть любым, но Если у вас XDebug 3, то обязательно запоминаем значение.

Донастраиваем docker-compose.yml

В контейнере с PHP для правильной интеграции с XDebug мы должны иметь доступ к локальной машине, то есть хосту:

extra_hosts:
      - "host.docker.internal:host-gateway"

Здесь важна только директива extra_hosts, она обязательна.

Донастраиваем Dockerfile контейнера с PHP

XDebug 3

; функции Xdebug
xdebug.mode=debug
; IP-адрес или имя хоста, к которому Xdebug подключится
xdebug.client_host=host.docker.internal
; порт, к которому Xdebug подключиться
xdebug.client_port=9001
; запускает трассировку функции
xdebug.start_with_request=yes
; название IDE
xdebug.idekey=PHPSTORM
; путь до файла где будут сохранятся логи
xdebug.log="/var/www/html/official/logs/xdebug/xdebug_access.log"
; уровень вывода логов, 10 максимальный
xdebug.log_level=0
; автоматическое определять IP-адрес клиента
xdebug.discover_client_host=true

xdebug.idekey указываем IDE key из шага #5.

xdebug.client_port порт из пункта #4.

xdebug.client_host хост.


Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг