Настройка xdebug phpstorm windows

Обновлено: 03.07.2024

В этой статье мы рассмотрим возможность подключения интерпретатора PHP, отладчика Xdebug к PhpStorm на OC Windows и использование встроенного в IDE web-сервера.

Начнем с установки отладчика Xdebug в PHP.

Установка Xdebug

Первым делом убедимся в том, что интерпретатор PHP установлен в систему и доступен, открыв командную строку и введя следующую команду: php -v

Должна появится информация о версии PHP, подобно этой:

Если этого не произошло, тогда делаем следующее:

Теперь можно снова проверить работу PHP командой php -v. Должна вывестись корректно версия PHP, как было показано выше.

Теперь можно перейти к установке отладчика Xdebug, для которого существует специальный помощник, значительно упрощающий процедуру установки. Для его использования перейдем по ссылке:

На этой странице, необходимо ввести в поле ввода информацию об установленном PHP-интерпретаторе, которая генерируется с помощью PHP-функции phpinfo(). Вводить нужно весь скопированный текст со страницы.

Или, введя в консоль команду php -i, которая генерирует информацию о PHP.

Копируем полученную информацию, нажимаем кнопку Analyse my phpinfo() output и получаем инструкцию по установке Xdebug.

В зависимости от вашей версии PHP и пути установки инструкция может отличаться от моей:

Перемещаем её в папку C:\php\ext

В файл C:\php\php.ini (если такого файла нет, ищем файл файл php.ini-development и переименовываем его в php.ini) находим секцию Dynamic Extensions и добавляем следующую строку:

Подключение интерпретатора PHP к PhpStorm

Теперь перейдем в PhpStorm и откроем настройки комбинацией клавиш Ctrl+Alt+S.

Далее, в секции Languages & Frameworks выберем пункт PHP. В этой секции необходимо назначить интерпретатор для IDE в пункте Interpreter нажав на кнопку …


В открывшемся окне, нажимаем на кнопку +, выбираем пункт Other local… в поле Name вводим любое имя для удобства дальнейшей идентификации, например: PHP 5.6.

В поле PHP executable указываем путь до интерпретатора, например: C:\php\php.exe. Обратите внимание на появившуюся версию PHP и дебагера, что свидетельствует о правильности установки.


Чтобы убедиться в том, что правильно отрабатывает подключенный интерпретатор PHP, создадим в PhpStorm новый проект, добавим к нему файл index.php и запишем в этот файл, например, функцию var_dump([ 1, 2, 3 ]) с переданным в нее массивом.

Работа с отладчиком Xdebug в PhpStorm

Прежде чем приступить к отладке PHP-скриптов с помощью Xdebug произведем необходимую настройку в файле php.ini. В секции Dynamic Extensions, после подключения расширения Xdebug, добавим следующие настройки:

Теперь зайдем в PhpStorm и откроем настройки. Перейдем в Languages & Frameworks -> PHP -> Debug. В секции Xdebug убедимся, что установлены следующие настройки:


Проверка работы отладчика Xdebug

Чтобы проверить, что все действия были проведены верно, создадим в новом проекте файл index.php и напишем следующий код:


И поставим точку остановки на строке с var_dump().

Теперь запустим отладку этого скрипта, нажав правую кнопку мыши и выбрав пункт Debug ‘index.php’.


Если все было сделано правильно, то в PhpStorm появится вывод дебага, как показано на скриншоте.

Прочитал сегодня статью «Отладка с помощью XDebug и PhpStorm на примере сайта 1С-Битрикс». В ней автор использует «зеленого жука» для запуска отладки. В комментариях предложены еще несколько методов запуска отладки, такие как специальные закладки, различные плагины и т.д. На мой взгляд, все это неудобно, к тому же есть наиболее простой и удобный вариант. Я мог бы предложить его в комментариях к статье, но, увы, в read-only это невозможно. Посему вынужден писать отдельную статью.

У xdebug есть возможность автостарта, без всяких премудростей. Достаточно просто расставить breakpoint'ы и открыть Ваше приложение в браузере, xdebug будет подхватывать старт сам.

  • Веб-сервер — OpenServer 4.8.8
  • PHP 5.4.17
  • XDebug 2.2.3
  • IDE PhpStorm 7.1.
1. Настройка XDebug

В php.ini подключаем расширение и устанавливаем параметры:

2. Настройка PhpStorm

Настраиваем интерпретатор, если у вас это еще не сделано.

image

image

Далее добавляете сервер, если вы сервер локальный, то пишете в поле Host — localhost, если удаленный то адрес удаленного хоста. Имя хоста здесь и в php.ini должно совпадать.

image

Настраиваем XDebug. Порт берем из php.ini (xdebug.remote_port). Если вам не нужно чтобы XDebug останавливался на первой строчке приложения, отключаем два нижних чекбокса.

image

Здесь значения так же берем из php.ini: IDE key -> xdebug.idekey, Host -> xdebug.remote_host, Port -> xdebug.remote_port.

image

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

Использование

Для начала работы расставляете breakpoint'ы, включаете прослушку порта XDebug и открываете ваше приложение.

image

image

Breakpoint'ы будут ловиться автоматически, без необходимости тыкать в «зеленого жука». Надеюсь информация кому-нибудь пригодится.

С помощью систем профилирования можно собрать информацию о том, какие функции и вызовы сколько потребляют процессорного времени, что позволяет выявить наиболее медленные, ресурсоемкие участки PHP-программы.

Существуют "классические" методы отладки - echo, var_dump, print_r, но в этой статье поговорим о более продвинутом способе дебага - xDebug. Расширение php xDebug предназначено для пошагового выполнения кода и просмотра значений переменных, что поднимает программирование на PHP на новый уровень.

В этой статье рассматривается настройка xDebug в IDE PhpStorm.

Подключение xDebug

Для работы xDebug PHP должен работать в режиме CGI. Для переключения режима работы PHP откройте раздел Сайты панели управления, нажмите на кнопку "PHP" напротив нужного домена и поставьте галочку "Режим CGI". На переключение режима работы может потребоваться до 15 минут.


Для включения расширения xDebug нужно добавить следующие строки в конец файла cgi-bin/php.ini (находится в каталоге сайта):

В случае, если указанный порт занят, попробуйте выбрать другой порт.

В некоторых случаях может потребоваться указать полный путь к файлу расширения!
При этом первая строка должна иметь следующий формат:

Например, для PHP 5.4 на сервере hugo путь будет таким:

Часть пути, включающая версию PHP Extension может отличаться в зависимости от сервера и версии PHP. Посмотреть нужную версию можно при помощи функции phpinfo().
Как создать файл с вызовом функции описано далее в статье.


Если каталог cgi-bin и/или файл php.ini отсутствуют, их нужно создать:

При необходимости вместо 5.6 можно вызвать PHP другой версии:

Для проверки настроек нужно создать в корне сайта файл x.php со следующим содержимым:

В браузере проверяем, подхватились ли настройки php.ini:


В этом примере рассматривается настройка порта 8014. Проверка того, свободен ли выбранный порт (выполняется на Вашем компьютере):

Можно выбрать и стандартный порт xDebug - 9000.

Настройка работы IDE PhpStorm с xDebug

Со справкой по установке IDE PhpStorm можно ознакомиться на официальном сайте разработчиков.

Для обеспечения совместной работы xDebug и IDE PhpStorm необходимо создать туннель к серверу с локального компьютера. Команда для Linux и OS X:

Если Вы используете ОС Windows — Вам понадобится утилита PuTTy, процесс ее установки и настройки описан в этой статье. Для настройки туннеля нужно указать имя сервера либо его IP. Уточнить эту информацию можно в Личном кабинете, в таблице "Общая информация". Порт по умолчанию остается 22, протокол - SSH:


После этого нужно открыть вкладку "Tunnels" и настроить так, как указано на скриншоте. После ввода настроек нужно нажать кнопку "Open":


Здесь нужно нажать на "Да":


После чего вводим логин и пароль (они такие же, как и для доступа к Личному кабинету).
Если ранее была настроена авторизация по ключам — вводить логин и пароль не потребуется.


Не забудьте включить SSH в Личном кабинете. Для этого нужно в Панели Управления аккаунтом нажать на переключатель напротив пункта SSH-доступ. Он находится на главной странице слева, в блоке "Тех. информация":


Если Вы работаете с FTP-аккаунтом, то SSH должен быть включён для него. SSH для FTP-аккаунтов включается в разделе FTP переключателем напротив нужного аккаунта.


Рассмотрим настройку PhpStorm с уже созданным локальным проектом.


Для отображения файлов сайта в PhpStorm нужно произвести некоторые настройки. Во вкладке "Settings" нужно настроить порт, на котором будет работать PhpStorm. В рассматриваемом примере это порт 8014, однако, Вы можете оставить порт по умолчанию - 9000.


Затем во вкладке "Servers" нужно настроить подключение PhpStorm к Вашему техническому домену account.beget.tech на 80 порт (либо 443, если для домена выпущен SSL-сертификат и сайт работает по HTTPS) (необходимо указать домен, на котором ранее был установлен XDebug). В настройках подключения также требуется указать соответствие путей, для этого отметьте галочкой пункт "Use path mappings". В левой части приведён локальный список файлов, справа указывается путь на сервере.

Как правило требуется задавать соответствие только для корневого каталога веб-сервера:


При использовании фреймворков, таких как Yii, Laravel или Symfony, необходимо отдельно указывать пути к директориям, в которых размещаются исходные коды проекта и корневой каталог веб-сервера.
Пример корректной настройки маппингов для проекта на Symfony:


Далее во вкладке "DBGp Proxy" указываем IDE-key PHPSTORM, который был ранее указан в файле php.ini, затем адрес сервера, который можно посмотреть в Личном кабинете, в таблице "Тех. информация", и указываем удаленный порт, с которого будeт приходить отладочная информация. Нужно будет нажать "Apply", затем "OK":


Для корректной работы дебага может потребоваться настройка конфигурации развёртывания проекта. Для этого откройте пункт меню "Tools" — "Deployment" — "Configuration". Здесь потребуется указать настройки для подключения к серверу по FTP либо SFTP. Мы рекомендуем использовать протокол SFTP — он более стабилен и безопасен. В качестве имени хоста укажите Ваш технический домен. Далее укажите логин и пароль для входа в систему. При использовании SFTP можно выбрать ключ, с которым выполняется авторизация по SSH. После этого нажмите на кнопку "Autodetect" рядом с пунктом "Root path" — будет определён домашний каталог учётной записи.

При использовании SFTP нажимать на кнопку обзора файловой системы (кнопка с тремя точками справа от поля Root Path) на этой вкладке не нужно. Обзор файловой системы по SFTP начинается с корневого каталога, доступ к которому запрещён, поэтому при попытке просмотра файловой системы возникнет ошибка Permission Denied.


После этого на вкладке "Mappings" укажите каталог, в котором размещены файлы проекта (здесь уже можновоспользоваться функцией обзора файловой системы сервера). Для большинства сайтов путь будет вида "/site/public_html". При использовании Yii, Symfony, Laravel и некоторых других фреймворков — /site (если Вами не была изменена структура проекта по умолчанию). В нашем примере используется Symfony, поэтому путь указываем без "public_html"


Чтобы узнать значения переменных в определенном месте скриптов, нужно сообщить PhpStorm, где именно нужно искать значения. Для этого предназначены брейкпоинты (точки останова).

Локальный файл и файл, размещённый на сервере, должны быть синхронизированы!

Сейчас нужно выставить брейкпоинт, указанный первым пунктом. Выбрав нужную строку php-кода, нужно нажать на область справа от номера строки либо нажать сочетание клавиш "Ctrl+F8", после чего включить прослушивание порта (стрелка 2), на который xDebug будет посылать ответ при запуске скрипта.


После этого можно открыть сайт в браузере. При первом входящем подключении от Xdebug будет запрошена информация о конфигурации проекта, необходимо выбрать текущий проект и конфигурацию деплоя, которая была настроена ранее. После этого нажмите кнопку «Accept».


По достижении точки останова в PhpStorm откроется дебаг-панель, где будут отображены значения всех переменных на момент обработки кода на месте брейкпоинта:


Также для наглядности значения переменных для исполненных участков кода указываются прямо в редакторе:


Для продолжения работы скрипта требуется нажать на кнопку "Resume Program" в дебаг-панели либо клавишу F9.

Удачной работы! Если возникнут вопросы - напишите нам, пожалуйста, тикет из Панели управления аккаунта, раздел "Помощь и поддержка".

Настройка XDebug для PHP7, описываемая в данной статье, является несколько устаревшей, ведь в данный момент используется уже PHP8. Рекомендуем переходить на него и воспользоваться инструкцией по настройке дебаггера для PHP8.

Настройка отладки PHP 7 в OpenServer

Первым делом давайте включим расширение Xdebug в файле конфигурации PHP (php.ini). Для этого идём в меню OpenServer -> Дополнительно -> Конфигурация -> PHP.

Конфигурация PHP в OpenServer

Здесь нам нужно найти секцию [Xdebug]. Как правило, она находится в конце этого файла.
Здесь нам нужно раскомментировать (или просто добавить) строки:

Включение Xdebug в php.ini

Должно получиться так:

Перезапуск OpenServer

После чего нужно сохранить файл (CTRL + S) и перезапустить веб-сервер.

На этом настройка веб-сервера для отладки завершена.

Настройка отладки в PHPStorm

Теперь нам нужно настроить отладку в PHPStorm. Первым делом идём в настройки:
File -> Settings

Здесь в левом меню выбираем:
PHP -> Debug

Прокручиваем правую часть до секции Xdebug, и задаём следующие настройки:

  • Debug port: 9000
  • Force break at first line when no path mapping specified: выключено
  • Force break at first line when a script is outside the project: выключено

Настройки отладки в PHPStorm

Сохраняем изменения, нажав на “OK”.

Выпадающее меню с конфигурацией для отладки

Теперь в верхней правой части программы жмём на такую выпадающую менюшку:

И жмём “Edit Configuration”.

PHP Remote Debug

В появившемся окне в левом верхнем углу жмём на плюсик и выбираем “PHP Remote Debug”.

Servers for debug

И нажимаем справа от пункта “Servers” на три точки:

В появившемся окне снова жмём на плюсик, и у нас в списке появляется новый сервер. Давайте зададим для него следующие настройки:

  • Name: localhost
  • Host: localhost
  • Port: 80
  • Debugger: Xdebug

Сервер для отладки

Сохраняем нажатием на “OK” и завершаем заполнять ранее открытую настройку. А именно:

Конфигурация для отладки в PHPStorm

И убеждаемся, что в “Servers” указан только что созданный нами “localhost”.

Сохраняем, нажав “OK”. На этом конфигурация PHPStorm для отладки PHP-приложений с помощью Xdebug завершена.

Настройка отладки в браузере Google Chrome

Дело осталось за малым – нужно только установить расширение для Chrome под названием Xdebug helper.

Заходим в Chrome и переходим по адресу: Xdebug helper

Напротив расширения Xdebug helper жмём кнопку “Установить”.

Меню Xdebug helper

После того, как расширение установлено в верхнем правом углу Chrome появится значок жучка. Жмём по нему правой кнопкой мыши и нажимаем “Параметры”.

Здесь в пункте IDE key в выпадающем меню выбираем PhpStorm.

Параметры Xdebug helper

И нажимаем “Save”.

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

Начинаем отлаживать

Итак, все настройки выполнены и дело осталось за малым – начать пользоваться отладчиком.

Давайте в нашем index.php запишем следующий код:

А затем слева от строки $x *= 2; кликнем по пространству между номером строки и самим кодом – появится красная точка.

Breakpoint в PHPStorm

Это брэйкпоинт (breakpoint), или, как её ещё называют – точка останова. К ней мы вернёмся чуть позже.

Теперь давайте включим отладчик – в правом верхнем углу PHPStorm, там где раньше была пустая выпадашка, а теперь выбран пункт “XDebug”, жмём на значок жучка.

Запуск отладки в PHPStorm

Отладка на уровне PHPStorm запущена.

Включение отладки в Google Chrome

После чего значок станет зелёным.

Ожидание загрузки страницы

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

Сработала точка останова в PHPStorm

А в окне PHPStorm увидеть следующее:

Наша программа остановила своё выполнение в месте брэйкпоинта.

Внизу программы (во вкладке Variables) мы можем видеть значения всех переменных в данный момент. Как видим, сейчас (до выполнения строки 5) $x равна 7.

Переход на следующий шаг

Давайте нажмём кнопку “F8”. Она осуществляет выполнение кода на текущей строке и останавливается перед следующим действием.

Умножили $x на 2, и как видим, её значение стало равно 14. Вот так с помощью отладки мы можем отслеживать значения переменных в какой-то определенный момент работы программы.

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

Давайте прямо сейчас нажмём F9. Это приведет к тому, что программа продолжит выполнение до следующего брэйкпоинта (да, их можно наставить сколько угодно). Если их больше не встретится (как в нашем примере), то программа просто завершит свою работу.

Давайте поиграемся с кодом посложнее:

Два брэйкпоинта

И установим два брэйкпоинта на строках 5 и 10.

Попали в первый брэйкпоинт

После чего обновим нашу страничку в браузере и попадём в первый брэйкпоинт на строке 10:

Попали на следующий брэйкпоинт

Здесь мы видим значения переменных $x и $y внутри функции. Нажмём F9 и программа выполнится до того момента, пока не дойдёт до следующего брэйкпоинта.

Здесь мы уже видим, что внутри функции доступны переменные $x и $y. Но это уже другие переменные, не те, что были переданы в функцию getSumOfCos(). Вот мы и увидели локальную область видимости в действии.

Стек вызовов

Помимо этого, в левом нижнем углу есть окошечко “Frames”, это так назваемый “стек вызовов”. Здесь мы можем переключаться на места, откуда был вызван наш код ранее. Так мы можем переключиться в то место, где была вызвана функция getSum().

И можем посмотреть переменные, которые были доступны в той области видимости (уровнем выше).

Watches при отладке

Ещё в правом нижнем углу можно увидеть окошечко “Watches”. Это такое место, где можно задать переменные или даже выражения, значения для которых вы хотели бы видеть всегда под рукой. Добавляются они туда с помощью плюсика. В появившемся окошечке вводим выражение, которое мы бы хотели отслеживать. Пусть это будет $x/2.

Отлично, осталось рассмотреть ещё одну клавишу и вы готовы к бою – F7. Она позволяет зайти “внутрь” какой-либо конструкции.

Один брэйкпоинт

Давайте закончим отладку нажатием F9. Поставим теперь только один брэйкпоинт на строке номер 15 и обновим страничку в браузере.

Если сейчас нажать F8, то программа закончит своё выполнение, и мы не попадём внутрь функций. Так происходит потому что во время отладки мы работаем на определённых уровнях вложенности, и если нам нужно будет попасть внутрь функции, то нужно будет нажать F7, находясь на строке 15. После этого мы окажемся на строке 10. Если сейчас нажать F8, попадём на строку 11. Ещё раз – на строку 12. Если мы сейчас, находясь на 12 строке нажмем F7, то попадём внутрь функции getSum() на строку 5. А если бы мы нажали F8, то мы просто поднялись бы на уровень выше, в то место, где была вызвана функция getSumOfCos().

В принципе, большего для отладки вам не потребуется (лично мне этого хватает).

Ну а сейчас пришла пора поотлаживать рекурсивные функции. Коль уж у вас возникли проблемы с прошлой домашкой – давайте их решать =)

Давайте возьмем и поковыряем код из предыдущей домашки:

Отладка рекурсивной функции

Поставим брэйкпоинт на 3 строке и запустим программу.

Уровень вложенности возрос

Итак, в функцию попала переменная $x = 3. Нажимаем F8, и попадаем на строку 7, так как условие не выполнилось. Теперь нажмём F7 и снова попадём в начало нашей функции, но теперь $x = 2. И при этом стек вызовов увеличился ещё на одну строку, то есть мы вошли в ещё один уровень вложенности.

И ещё один уровень вложенности

Жмём F8 и снова оказываемся на строке 7. Нажимаем F7 и снова попадаем в новый вызов функции, только уже $x = 1, а в стэке вызовов появился ещё один уровень.

Пошёл вывод

Снова F8 и затем F7. И вот уже в функции $x = 0.
Жмём F8 и оказываемся на строке 4 (теперь условие выполнилось). На этой строке программа выведет 0.

Жмём F8 и попадаем на строку 5. Сейчас функция завершит свою работу и мы попадём на уровень выше, в то место, где она была вызвана. Итак, жмём F8.

Вернулись на уровень выше

Вуаля, мы вернулись на уровень выше, там, где переменная $x = 1.

И попали мы на следующую строку, после той в которой вызвали функцию numbers(1 - 1). И на этой строке мы вывели уже число 1. А дальше – жмите F8 и наблюдайте за ходом выполнения программы. Надеюсь теперь рекурсия для вас понятна =)

Читайте также: