Настройка Xdebug - Vagrant - PhpStorm
Подробная инструкция по установке и настройк Xdebug 3 (2) для тестирования в IDE PhpStorm - веб-приложения, работающего на виртуальной машине Vagrant.
Данный мануал протестирован в следующей конфигурации:
host:
Linux Mint
phpStorm 2021.3.2
Vagrant 2.2.6
guest:
Linux version 5.4.0-91-generic (buildd@lcy01-amd64-017)
(gcc version 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04))
PHP 7.4.28 (cli)
Xdebug v3.1.2
Настройка Xdebug для скриптов, которые отрабатывают в результате запроса из браузера
1. Подключаемся к Vagrant:vagrant ssh
2. Проверяем установлен ли Xdebug:
php -v
Обращаем внимание - какая у вас версия Xdebug!
3. Если не установлен - устанавливаем:
sudo apt install php-xdebug
4. Открываем php.ini :
sudo nano /etc/php/7.4/apache2/php.ini
(чтобы узнать где у вас расположен php.ini выполните locate php.ini)
Примечание:
как альтернативный вариант - вместо редактирования php.ini можно использовать глобальный фаил конфигурации Xdebug (иногда нужно так):
sudo nano /etc/php/7.4X/mods-available/xdebug.ini
4.1 Ищем настройки Xdebug через поиск (в nano:F6) слова xdebug
(этихнастроек может не быть вообще)
В итоге, для: Xdebug 3 нужно вставить следующие настройки:
(на 3 версии и тестировалось данное руководство)
[xdebug 3]
xdebug.start_with_request=yes
xdebug.mode=debug
xdebug.client_host=192.168.105.1
xdebug.discover_client_host=true
xdebug.client_port=9003
xdebug.idekey="PHPSTORM"
а если у вас Xdebug 2 - то эти:
[xdebug 2]
;zend_extension="<path to xdebug extension>"
xdebug.remote_enable=1
xdebug.remote_host=192.168.105.1
xdebug.remote_port=9003
xdebug.idekey = "PHPSTORM"
(если php -v выводит версию Xdebug, то zend_extension="<path to xdebug extension>" - вроде как можно оставить закомментированной)
Вместо ip адреса который указан в приведенных настройках - указываете реальный ip вашей VM
(а не тот, который в Vagrant файле).
Узнать его можно выполнив команду ifconfig в терминале вашей реальной (host) машины (НЕ на виртуалки!!!)
(номер подключения vboxnet у вас скорее всего будет другой)
5. Далее, возвращаемся в терминал виртуалки (ели переходили на host машину узнавать ip).
Откройте фаил настроек сервера Apache для вашего сайта (в моём случае это 000-default.conf)
sudo nano /etc/apache2/sites-available/000-default.conf
Убедитесь что в этом файле есть такая секция:
<VirtualHost *:443>
ServerName my-test.loc
DocumentRoot /var/www/source/pub
# Backup option for host setup
#DocumentRoot /vagrant/source/pub
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key
</VirtualHost>
где: DocumentRoot - путь к каталогу с файлом index.php;
ServerName - укажите свой;
сохраняем этот фаил настроек и перезапускаем Apache:
sudo systemctl restart apache2
Всё, Vagrant виртуальная машина - настроена!
Теперь настраиваем phpStorm (v2021.3.2)
1. File -> Settings -> Debug
Устанавливаем аналогично скрину:
2. Далеее открываем вкладку Debug -> DBGpProxy
Устанавливаем как показано ниже (здесь ставим ip из Vagrant фаила виртуальной машинны): PHPSTORM - ключ который мы установили в настройках php.
3. Далее на вкладке PHP -> Servers
Устанавливаем аналогично:
(my-test.loc - естественно меняете на своё).
Важно!!!
1. Укажите абсолютный путь к проекту на виртуалке, напротив абсолютного пути к проекту в mounted каталоге (у вас он может быть другой);
2. Порт устанавливаем 443 если вы будете запрашивать через https, и 80 если через http .
Не забываем после настроек каждой вкладки прожимать Apply =)
4. Далле заходим в Run/Debug настройки как показано ниже:
5. У вас там вряд ли будут какие-то конфигурации. Создаём новую, жмём на плюс в левом верхнем углу и выбираем PHP Remote Debug
6. Устанавливаем настройки аналогично:
Server выбираем из выпадающего списка (если там нет - жмём на три точки (указаны на скрине)) который мы настроили в предыдущих пунктах.
IDE key: PHPSTORM это ключ который мы куказали в настройках xdebug.idekey = "PHPSTORM" в php.ini
7. Теперь жмём на значёк "Start Listerning for PHP Debug Connections"
8. Ставим точки останова для теста (например в файле - точке входа вашего веб-приложения)
9. Идём в браузер, обновляем страницу вашего тестового сайта, сайт "подвисает", а вас
перенаправляет в phpStorm:
открываются окна отладки с соответствующими инструментами
Настройка Xdebug для отладки CLI скриптов
Теперь настроим Xdebug для отладки скриптов которые запускаются из командной строки.
1. Переключаемся в терминал виртуальной машины (обычно: vagrant ssh).
Редактируем фаил (в моём случае) /etc/php/7.4/mods-available/xdebug.ini
sudo nano /etc/php/7.4/mods-available/xdebug.ini
Его содержимое должно выглядеть так:
zend_extension=xdebug.so
xdebug.start_with_request=yes
xdebug.mode=debug
xdebug.client_host=192.168.105.1
xdebug.discover_client_host=true
xdebug.client_port=9003
xdebug.idekey="PHPSTORM"
Напомню, что указываемый ip смотрим выполнив комманду ifconfig на хост машине (не виртуалки!). Где смотреть видно на скрине пункта 4.1 (в начале данной статьи).
2. Перезапускаем вебсервер Apache 2:
sudo service apache2 restart
Всё, виртуалка настроена!
Далее, настроим phpStorm.
1. Сначала узнаём ip для поля Host настроек сервера. Для этого в виртуалке выполняем:
ip addr
В моём случае ip: 10.0.2.15
2. В phpStorm идём:
File | Settings | Languages & Frameworks | PHP | Servers
и добавляем такую конфигурацию:
3. Далее идём в наскройки "Edit Configurations":
3.1 Жмём на плюс в левом верхнем углу (Add new configuration)
и выбираем PHP Remote Debug из предложенного списка
4. Устанавливаем следующие значения:
6. Теперь выбираем из выпадающего списка нашу конфигурацию "cli" и жмёь на значёк слушать (предварительно поставив точку останова в скрипте)
Готово! Теперь, если нигде не ошиблись, то после запуска скрипта из командной строки - выполнение скрипта прервётся в месте, где вы поставили точку останова (breakpoint), и автоматически вас перенесёт в phpStorm в соответствующую строку файла выполняемого скрипта.
Поздравляю, вы настроили Xdebug !!!