IT-Storm

Почему у нас никогда нет времени на то, чтобы сделать все правильно, но всегда есть время на то, чтобы сделать этого больше?

Menu

Настройка Xdebug - Vagrant - PhpStorm

Настройка 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

Обращаем внимание - какая у вас версия 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) машины (НЕ на виртуалки!!!)
узнать IP адрес виртуальной машины Vagrant
(номер подключения 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
Устанавливаем аналогично скрину:
Xdebug, настройка в phpStorm

2. Далеее открываем вкладку Debug -> DBGpProxy
Устанавливаем как показано ниже (здесь ставим ip из Vagrant фаила виртуальной машинны): PHPSTORM - ключ который мы установили в настройках php.
 настройка Xdebug в phpStorm. Debug -> DBGpProxy

3. Далее на вкладке PHP -> Servers 
Устанавливаем аналогично:
Настройка Xdebug в PhpStorm. PHP -> Servers
(my-test.loc - естественно меняете на своё).
Важно!!!
1. Укажите абсолютный путь к проекту на виртуалке, напротив абсолютного пути к проекту в mounted каталоге (у вас он может быть другой);
2. Порт устанавливаем 443 если вы будете запрашивать через https, и 80 если через http


Не забываем после настроек каждой вкладки прожимать Apply =)

4. Далле заходим в Run/Debug настройки как показано ниже:
Настройка Xdebug в PhpStorm. Run\/Debug

5. У вас там вряд ли будут какие-то конфигурации. Создаём новую, жмём на плюс в левом верхнем углу и выбираем PHP Remote Debug
Настройка Xdebug в PhpStorm, PHP Remote Debug

6. Устанавливаем настройки аналогично:
Настройка Xdebug в PhpStorm

Server выбираем из выпадающего списка (если там нет - жмём на три точки (указаны на скрине)) который мы настроили в предыдущих пунктах.
IDE key: PHPSTORM это ключ который мы куказали в настройках xdebug.idekey = "PHPSTORM" в php.ini

7. Теперь жмём на значёк "Start Listerning for PHP Debug Connections"
Настройка Xdebug в PhpStorm, "Start Listerning for PHP Debug Connections"

8. Ставим точки останова для теста (например в файле - точке входа вашего веб-приложения)
PHP Debug Connections, настройка Xdebug -> Vagrant -> phpStorm

9. Идём в браузер, обновляем страницу вашего тестового сайта, сайт "подвисает", а вас
перенаправляет в phpStorm:
открываются окна отладки с соответствующими инструментами
Xdebug - настроен в PhpStorm для приложения на Vagrant


Настройка 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 !!!





 

PHP