Отладка PHP-приложений из Homestead в PHPStorm

Многие PHP-разработчики привыкли отлаживать свои приложения не только посредством var_dump-подобных инструкций, но и при помощи XDebug, используя любимую IDE. Когда-то я делал это в Netbeans‘е, но вот уже почти пол-года как пользуюсь такой замечательной IDE, как PhpStorm. Эта IDE славится очень многими вещами, и одна из его прелестей — это zero-configuration debugging, то есть отладка без какой-либо предварительной конфигурации. Однако, если вы собираетесь отлаживать свои Laravel-приложения, запущенные в виртуальной машине Homestead, небольшую подготовку все же придется сделать. Об этом и будет эта заметка.

Тем, кто еще не в курсе, что такое Homestead, могу посоветовать прочитать мой первый урок по разработке на Laravel. А тех, кто знает английский, могу направить на оригинальный пост, описывающий процесс отладки в PhpStrom приложений из Homestead и его настройку.

Итак, приступим. Сперва залогиньтесь в Homestead через ssh. Сделать это можно как из командной строки вашей ОС (перейдя в корневую папку Homestead и выполнив  vagrant ssh), так и напрямую из PhpStorm (Tools -> Start SSH session …), но в этом случае придется указать настройки соединения, если вы делаете это впервые.

Затем нужно настроить сам XDebug, который по умолчанию есть в Homestead. Для этого нужно отредактировать файл /etc/php5/fpm/conf.d/20-xdebug.ini :

Его содержимое должно быть таким:

Для того, чтобы сохранить изменения в файле, нужно нажать Ctrl + X, затем ответить Y на вопрос о сохранении, и затем подтвердить путь сохранения файла.

После этого нужно перезапустить php5-fpm следующей командой:

Далее нужно установить специальное расширение к Хрому (если, конечно, это еще не сделано): XDebug Helper. Пользоваться им очень просто: в адресной строке справа появится иконка жука, нажав на которую на интересующей нас странице (то есть на той, которую собираемся дебажить) выпадет меню, в котором нас интересует пункт Debug.

Осталось разобраться с самим PhpStrom. Теоретически, все что нужно сделать, это нажать на кнопку «Start Listen for PHP Debug Connections» (или выбрать такой пункт в меню Run (второй снизу)) и поставить breakpoint на интересующей вас строчке кода (либо сказать PhpStrom’у остановиться на первой же строчке запускаемого скрипта, выбрав последний пункт в меню Run: «Break at first  line in PHP scripts»). Но, к сожалению, не для всех проектов (в том числе и для Laravel) этого «zero-configuration» будет достаточно, нужно проделать еще кое-что, а именно — настроить соответствие локальных и удаленных путей, или, иными словами, маппинг (mapping).

Для этого нужно зайти в настройки (Ctrl + Alt + S) и найти там пункт PHP -> Servers в части настроек, касающихся проекта (чтобы упростить задачу, можете сразу открыв настройки начать вводить «servers», и PhpStrom отфильтрует все лишние настройки). Здесь нужно добавить новый сервер, который собираетесь дебажить, и, повторюсь, настроить маппинг путей. Например, в моем случае я собираюсь отлаживать проект «sbshare», расположенный локально в  C:\4Work\Private\sbshare и доступный по адресу http://sbshare.localhost:8000/. Поэтому я жму на зеленый плюсик наверху слева, в качестве имени и хоста указываю «sbshare.localhost». Также отмечаю галочку «Use path mappings (…)», говорящую PhpStorm’у, что я собираюсь настраивать маппинг. Мой Homestead настроен таким образом, что папка  C:\4Work доступна в нем как  /home/vagrant/Code. А это означает, что папка проекта доступна в Homestead по пути  /home/vagrant/Code/Private/sbshare — это и есть соответствие, которое нужно указать. Для этого в появившемся дереве нужно выбрать корень проекта (не public, а именно корень, то есть sbshare) и в правой колонке указать этот путь. Номер порта нужно оставить 80, несмотря на то, что из родной системы мы стучимся к серверу по 8000 порту: 8000й порт — это лишь перенаправление на 80й порт nginx’а. Соотв-но, запускаемый XDebug ничего не знает ни о каких перенаправлениях и отсылает отладчику информацию непосредственно о  веб-сервере, на котором запущен. Итого, настройка сервера в моем случае выглядит так:

Добавление сервера

Главное, это отметить галкой «Use path mappings (…)» и не обращать внимание на то, что у меня в пути два раза встречается Private 😀

На этом почти все. Осталась самая малость: подправить конфиг сервера, который собираетесь дебажить. Конфиги nginx’а находятся в директории  /etc/nginx/sites-enabled/ и называются, как правило, в соответсвии с обслуживаемым доменом. В требуемый конфиг нужно добавить строчку:

Это нужно для того, чтобы сервер дождался вас, пока вы дебажите скрипт, и не выдал броузеру 504 ошибку «Gateway timeout». В данном случае на отладку одного сеанса вам дается 10 минут (600 секунд), чего обычно хватает.

Вот теперь точно все, можно дебажить 🙂 Желаю всем удачи и как можно меньше багов 😉

P.S. Напоследок, парочка видео об отладке в PhpStorm (для тех, кто знает и понимает английский):

  1. Webinar: Debugging PHP with PhpStorm

  2. Урок «XDebug» с Laracasts.com от Джеффри Вэя (для тех, у кого оформлена подписка на сайт).

Отладка PHP-приложений из Homestead в PHPStorm: 2 комментария

  1. Спасибо за уроки.
    При работе через homestead не дает исправить настройки nginx, говорит, что нет прав. Не помешает ли это при использовании материала будущих уроков?

Добавить комментарий для Иван Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.