Удаленная отладка консольных PHP скриптов в Intellij IDEA / PhpStorm

Предположим что идет разработка php проекта, на фреймворке. Предположим у нас есть или виртуальная машина, vagrant или просто virtualbox или есть vds тестовый сервер. И часть функционала запускается по отдельной ветке через консоль или cron. И почему-то падает, про логирование и тесты конечно же забыли, или на это просто не дали денег, но поправить нужно быстро.
И эффективным инструментом является конечно же отладка (дебаг).

Предварительные требования

  1. Для разработки у нас на сервере установлен и настроен xdebug.
  2. Уже должен быть настроен openssh т. к. удаленное соединение будет через ssh-туннель.

Итак начнем.

Настройки проекта

  • Первое что нужно сделать — создать ssh туннель (ссылка выше).
  • Следом идем в настройки проекта в Идее: File → Settings → Languages & Frameworks → PHP → Debug и в разделе Xdebug проверяем как стоит порт. Т.к. у меня 9000 порт уже занят, то я ставлю, например, 9004
    proj_settings
    Обратите внимание в верху в хлебной крошке написано Languages & Frameworks > PHP For current project
    То есть все изменения коснутся только текущего проекта и можно совершенно спокойно, не опасаясь за какие-то глобальные изменения, поэкспериментировать с настройками.
  • Теперь нужно настроить интерпретатор php.
    Выбираем на пункт выше, выбираем PHP.
    php_settings
    Выбираем нужный языковой уровень — у меня на сервере 5.5.9.
  • Чтобы выбрать/создать конфигурацию для интерпретатора.
    Жмем на плюсик и выбираем Remote
    php_interpreters_2

    У меня установлен плагин для работы с vagrant боксами, так же есть возможность выбрать настройки из deployment где уже настроены параметры ssh соединения и, наконец, можно ввести параметры нового ssh соединения.
    php_interpreters_4
    Заполняю параметры — хост/порт, имя пользователя, метод аутентификации беру по-умолчанию Password, пароль и стандартный путь к php интерпретатору /usr/bin/php
    Все пока что больше тут ничего не интересует, применяем изменения и возвращаемся в настройки пхп.

  • Теперь необходимо указать маппинг для расположения файлов проекта. Открываем Path mapping, жмем + и заполняем Local Path — путь к файлам на локалке и Remote Path — путь к проекту на сервере.
    path_mapping

Настройки конфигурации запуска/отладки

Общие настройки проекта завершились, теперь нужно создать конфигурацию для запуска и дебага.
Для этого идем в Run → Edit Configurations. В открывшемся окне не нужно трогать список Defaults, а сразу жмем плюсик и выбираем добавление новой конфигурации (внимание!) просто PHP Script.
run_config
Задаем имя, выбираем файл скрипта, если необходимо заполняем еще параметры. Применяем изменения, закрываем и открываем файл скрипта который нужно отладить. Расставляем брекпойнты и запускаем отладку.
run_config_2

Если скрипт простой, то на этом все, но если используется автозагрузчик — получим ошибку. Для дебаг-конфигурации PHPUnit есть место где можно указать файл автозагрузчика. Но если мы используем автозагрузчик, то скорее всего это не просто скрипт, а большое или не очень приложение и скорее всего есть точка входа, в которой автозагрузчик подключается, и тогда в настройках конфигурации нужно указать именно этот файл.

Вот на примере фреймворка Yii. Для запуска консольных команд он использует специальный файл yii. В нем подключается все необходимое для выполнения консольной программы в рамках фреймворка.
Формат консольной команды из папки проекта выглядит примерно так (используя маршрутизацию по-умолчанию):

./yii controller/action

Тогда в настройках конфигурации нужно указать File: _путь_к_проекту/yii
А в Arguments записывается контроллер/метод
run_config_3
Все, удачного дебага.

Leave a Reply

Your email address will not be published. Required fields are marked *