Как установить и настроить Xdebug для PHPStorm

Как установить и настроить Xdebug для PHPStorm

В этой статье речь пойдет об установке Xdebug на серверную ubuntu и последующей настройке дебагера в PHPStorm.
Для начала небольшое определение, что это за библиотека и для чего она нужна (для тех, кто не знает).

Xdebug — свободная библиотека для разработчиков PHP. Основной целью расширения является максимально возможное упрощение отладки PHP-скриптов и добавление в разработку на PHP таких удобств, как точки останова, пошаговое выполнение и наблюдение за выражениями.

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

Содержание

Установка Xdebug на виртуальный сервер

Устанавливать Xdebug будем на нашу серверную ubuntu, которые мы установили из прошлых статей на VirtualBox.
Итак для начала логинимся на сервер по ssh, запускаем PuTTY, вводим команду установки.

1
sudo apt-get install php5-xdebug

После установки открываем файл с настройками Xdebug на редактирование /etc/php5/conf.d/xdebug.ini

1
2
cd /etc/php5/conf.d/
sudo nano xdebug.ini

и добавляем следующие строки

1
2
xdebug.remote_enable=1
xdebug.remote_host=192.168.0.104

Вкратце пробежимся по каждому параметру:

  • xdebug.remote_enable - параметр, позволяющий устанавливать Xdebug контакт с дебаг клиентом, который прослушивает порт и хост, установленные параметрами xdebug.remote_host и xdebug.remote_port.
  • xdebug.remote_host - ip адрес хоста, с которого будет запущен дебагер, проще говоря, это - ip адрес вашей машины, на которой у вас установлен phpstorm.

Перезапускаем apache.

1
sudo service apache2 restart

На этом наши настройки на сервере закончены, теперь отправляемся в PHPStorm.

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

Переходим на вкладку Run/Debug Configurations через меню Run → Edit Configurations. Жмем на кнопку add.png, из выпадающего списка выбираем PHP Web Application.
xdebug_add_new.png
В окне настроек сразу присваиваем имя дебагеру и указываем, что дебагер будем запускать из FireFox.
xdebug_settings_step_1.png
Теперь необходимо выбрать сервер, который позволит PHPStorm связываться с Xdebug. По кнопке add_server.png откроется окно Servers, на котором добавляем свой собственный сервер с помощью кнопки add.png. Даем имя серверу, в поле Host вводим localhost, в поле Port - 9000 (порт по умолчанию в Xdebug).
xdebug_settings_step_2.png
Затем необходимо проверить валидность введенных параметров с помощью кнопки Validate remote environment. Появится новое окошко, в нем выбираем уже созданный сервер для синхронизации файлов (в нашем случае ubuntu-test)
xdebug_settings_step_3.png
и переходим в его параметры по кнопке add_server.png
Немного подкорректируем настройки. На вкладке Connection изменяем Web server root URL с ip адреса на доменное имя проекта.
xdebug_settings_step_4.png
Затем переходим на вкладку Mappings и указываем соответствие путей и папок, где непосредственно лежит Drupal проект.
xdebug_settings_step_5.png
Применяем настройки и возвращаемся в окно Validate Remote Environment, проверяем валидность введенных параметров. Если у вас сообщение подобно этому, то все сделано правильно.
xdebug_settings_step_6.png
Закрываем окно и возвращаемся в окно Серверы. Ставим галочку Use path mappings и дописываем путь к корневой папки сайта на сервере.
xdebug_settings_step_7.png
Подтверждаем изменения и возвращаемся в окно Run/Debug Configurations. Здесь изменяем url сайта в поле Start Url на доменное имя, т.е. для devsite - http://devsite
Закрываем окно, подтвердив изменения, ставим точку останова, например, в index.php и запускаем дебаггер через меню Run → Debug 'devsite-xdebug' (Debug + имя сервера для дебага) или по кнопке run_debug.png. Если все настройки введены верно, выполнения скрипта остановится на том breakpoint, который был установлен.
xdebug_settings_step_8.png

Не работает Xdebug, что делать?

Что делать, если вдруг вы обнаружили, что когда-то удачно настроенный Xdebug перестал останавливать скрипт на брейкпоинтах. После долгих и упорных поисков ничего не обнаружено, validation script прекрасно отрабатывает и показывает следующую картинку
xdebug_settings_step_6.png
Remote host: 192.168.0.104 - это ip адрес, по которому Xdebug связывается с вашей локальной машиной. Обратите внимание(!), что PHPStorm показывает те настройки, которые выставлены параметром xdebug.remote_host. В данной ситуации выполним следующее:

  • идем в конфиг Xdebug (/etc/php5/conf.d/xdebug.ini)
  • 1
    2
    
    cd /etc/php5/conf.d/
    sudo nano xdebug.ini

    и дописываем параметр

    1
    
    xdebug.remote_connect_back=1

    Данный параметр будет игнорировать xdebug.remote_host и искать ip адрес машины, запустившей дебаг процесс, в переменной $_SERVER['REMOTE_ADDR'].

  • Перезапускаем apache.
  • 1
    
    sudo service apache2 restart
  • Ставим брейкпоинт и запускаем дебагер.

Если скрипт остановился на нужном брейкпоинте - значит, проблема в неверно указанном параметре xdebug.remote_host и самое время проверить ip локальной машины.
Сделать это можно несколькими способами. Самый распространенный - запустить командную строку cmd и набрать ipconfig. Или же, раз уже запущен дебагер, посмотреть содержимое переменной $_SERVER['REMOTE_ADDR'].
remote address

Итак, выяснили, что ip адреса отличаются. Корректируем параметр xdebug.remote_host и комментим строку с xdebug.remote_connect_back=1 (либо выставляете значение 0). Если же у вас ip адрес формируется динамически (как в моем случае), то можно вообще оставить параметр xdebug.remote_connect_back=1, при условии, что кроме вас никто не имеет доступ к этому серверу. В противном случае, любой сможет начать дебаг сессию, даже если его ip не совпадает с параметром xdebug.remote_host.

Также распространенной проблемой отказа работы Xdebug являются антивирусы (либо фаерволы). Временно отключите антивирус и проверьте, не блокирует ли он запросы от удаленного сервера (такая ситуация была с avast).

Дополнительная информация по статье

  1. Версии программных продуктов, используемых в статье: PHPStorm 7.1, Xdebug 2.1.0
  2. http://xdebug.org/ - официальный сайт Xdebug
  3. https://ru.wikipedia.org/wiki/Xdebug - информация о Xdebug на wiki
  4. https://www.jetbrains.com/phpstorm/help/configuring-xdebug.html - конфигурация Xdebug в PHPStorm