С помощью систем профилирования можно собрать информацию о том, какие функции и вызовы сколько потребляют процессорного времени, что позволяет выявить наиболее медленные, ресурсоемкие участки 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 (находится в каталоге сайта):
zend_extension = xdebug.so
xdebug.remote_enable=1
xdebug.remote_host=127.0.0.1
xdebug.remote_port=3083
xdebug.idekey=PHPSTORM
xdebug.remote_autostart=1
В случае, если указанный порт занят, попробуйте выбрать другой порт.
При этом первая строка должна иметь следующий формат:
zend_extension = /usr/local/php-cgi/<версия.php>/lib/php/<версия php extension>/xdebug.so
Например, для PHP 5.4 на сервере hugo путь будет таким:
zend_extension = /usr/local/php-cgi/5.4/lib/php/20100525/xdebug.so
Часть пути, включающая версию PHP Extension может отличаться в зависимости от сервера и версии PHP. Посмотреть нужную версию можно при помощи функции phpinfo().
Как создать файл с вызовом функции описано далее в статье.
Если каталог cgi-bin и/или файл php.ini отсутствуют, их нужно создать:
account@server:~/site.com/public_html [0] $ mkdir cgi-bin
account@server:~/site.com/public_html [0] $ php5.6 --ini | head -n2
Configuration File (php.ini) Path: /etc/php/cgi/5.6
Loaded Configuration File: /etc/php/cgi/5.6/php.ini
account@server:~/site.com/public_html [0] $ cp /etc/php/cgi/5.6/php.ini cgi-bin
account@server:~/site.com/public_html [0] $
При необходимости вместо 5.6 можно вызвать PHP другой версии:
+-----------+---------------------+
| Версия | Команда для запуска |
+-----------+---------------------|
| PHP v4.4 | php4.4 |
| PHP v5.2 | php5.2 |
| PHP v5.3 | php5.3 |
| PHP v5.4 | php5.4 |
| PHP v5.5 | php5.5 |
| PHP v5.6 | php5.6 |
| PHP v7.0 | php7.0 |
| PHP v7.1 | php7.1 |
+-----------+---------------------+
Для проверки настроек нужно создать в корне сайта файл x.php со следующим содержимым:
<?php
phpinfo();
?>
В браузере проверяем, подхватились ли настройки php.ini:
В этом примере рассматривается настройка порта 8014. Проверка того, свободен ли выбранный порт (выполняется на Вашем компьютере):
root@supcomp:~# netstat -tlnp
Активные соединения с интернетом (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:40103 0.0.0.0:* LISTEN 7081/java
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1223/mysqld
tcp 0 0 127.0.0.1:36555 0.0.0.0:* LISTEN 6786/cli
tcp 0 0 0.0.0.0:5355 0.0.0.0:* LISTEN 1176/systemd-resolv
tcp 0 0 127.0.0.1:63342 0.0.0.0:* LISTEN 4682/java
tcp 0 0 127.0.0.1:63343 0.0.0.0:* LISTEN 7081/java
tcp 0 0 127.0.0.1:5939 0.0.0.0:* LISTEN 1628/teamviewerd
tcp 0 0 0.0.0.0:33493 0.0.0.0:* LISTEN 7211/java
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1222/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 3575/cupsd
tcp 0 0 127.0.0.1:6942 0.0.0.0:* LISTEN 4682/java
tcp 0 0 127.0.0.1:6943 0.0.0.0:* LISTEN 7081/java
tcp 0 0 127.0.0.1:44385 0.0.0.0:* LISTEN 7211/java
tcp6 0 0 :::5355 :::* LISTEN 1176/systemd-resolv
tcp6 0 0 :::80 :::* LISTEN 1387/apache2
tcp6 0 0 :::1716 :::* LISTEN 2569/kdeconnectd
tcp6 0 0 :::22 :::* LISTEN 1222/sshd
tcp6 0 0 ::1:631 :::* LISTEN 3575/cupsd
root@supcomp:~# netstat -tlnp | grep 8014
root@supcomp:~#
Можно выбрать и стандартный порт xDebug - 9000.
Настройка работы IDE PhpStorm с xDebug
Со справкой по установке IDE PhpStorm можно ознакомиться на официальном сайте разработчиков.
Для обеспечения совместной работы xDebug и IDE PhpStorm необходимо создать туннель к серверу с локального компьютера. Команда для Linux и OS X:
$ ssh -R 8014:localhost:8014 account@account.beget.tech
Если Вы используете ОС 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" — будет определён домашний каталог учётной записи.
После этого на вкладке "Mappings" укажите каталог, в котором размещены файлы проекта (здесь уже можновоспользоваться функцией обзора файловой системы сервера). Для большинства сайтов путь будет вида "/site/public_html". При использовании Yii, Symfony, Laravel и некоторых других фреймворков — /site (если Вами не была изменена структура проекта по умолчанию). В нашем примере используется Symfony, поэтому путь указываем без "public_html"
Чтобы узнать значения переменных в определенном месте скриптов, нужно сообщить PhpStorm, где именно нужно искать значения. Для этого предназначены брейкпоинты (точки останова).
Сейчас нужно выставить брейкпоинт, указанный первым пунктом. Выбрав нужную строку php-кода, нужно нажать на область справа от номера строки либо нажать сочетание клавиш "Ctrl+F8", после чего включить прослушивание порта (стрелка 2), на который xDebug будет посылать ответ при запуске скрипта.
После этого можно открыть сайт в браузере. При первом входящем подключении от Xdebug будет запрошена информация о конфигурации проекта, необходимо выбрать текущий проект и конфигурацию деплоя, которая была настроена ранее. После этого нажмите кнопку «Accept».
По достижении точки останова в PhpStorm откроется дебаг-панель, где будут отображены значения всех переменных на момент обработки кода на месте брейкпоинта:
Также для наглядности значения переменных для исполненных участков кода указываются прямо в редакторе:
Для продолжения работы скрипта требуется нажать на кнопку "Resume Program" в дебаг-панели либо клавишу F9.
Удачной работы! Если возникнут вопросы - напишите нам, пожалуйста, тикет из Панели управления аккаунта, раздел "Помощь и поддержка".