Netbeans, отладка xdebug и сервер XAMPP

К сожалению установить все эти продукты “из коробки” и сразу возрадоваться их совместной работе не получается. И судя по отзывам в сети это проблема распространенная, а судя по конфигурации сервера то без подкрутки никак.

Начнем с сервера и всего что к нему прилагается. XAMPP один из самых распространенных продуктов, который включает в себя все необходимое для того чтобы развернуть локальный веб сервер. Опишу что пришлось докручивать в нем чтобы мои проекты заработали на новом сервере.

Установка XAMPP не требует каких то особых знаний, просто отключите, если есть уже запущенные сервисы apache или mysql, и выберите удобную папку, желательно в корне одного из дисков.

Основные модули PHP включены по умолчанию. Что нам необходимо включить так это xdebug. Несмотря на свою распространенность, этот модуль отладки устанавливается не просто раскоментированием одной строки.
Проблема можем возникнуть если вы используйте дополне5ния от Zend, Zend оптимизация и xdebug не могут работать вместе.

Итак, после установки открываем контрольную панель XAMPP, дает доступ к настройкам и всяким приятностям, жмем “config” для Apache и лезем редактировать php.ini или находим его в [путь_к_папке_xampp]/php/php.ini

В коде уже может быть блок с описанием настроект Xdubug тогда просто, раскомментировываем все поля, убираем знак “;” перед строкой и она становится активной.
Если такого блока нет то создаем его и прописываем следующие настройки:

1
2
3
4
5
6
7
8
9
10
 [XDebug]
zend_extension_ts = "D:\xampp\php\ext\php_xdebug.dll"
zend_extension = "D:\xampp\php\ext\php_xdebug.dll"
xdebug.remote_enable = 1
xdebug.remote_handler = dbgp
xdebug.remote_host = 127.0.0.1
xdebug.trace_output_dir = "D:\xampp\tmp"
xdebug.remote_port = 9000
xdebug.profiler_enable = 0
xdebug.collect_return=0
 [XDebug]
zend_extension_ts = "D:\xampp\php\ext\php_xdebug.dll"
zend_extension = "D:\xampp\php\ext\php_xdebug.dll"
xdebug.remote_enable = 1
xdebug.remote_handler = dbgp
xdebug.remote_host = 127.0.0.1
xdebug.trace_output_dir = "D:\xampp\tmp"
xdebug.remote_port = 9000
xdebug.profiler_enable = 0
xdebug.collect_return=0

У меня пусть к папке xampp не стандартен. Я устанавливаю его на диск D: замените букву диска если он у вас установлен в C:
Будьте внимательны не нужно подключать xdebug в виде обычного расширения в виде extension=php_xdebug.dll , тогда ваши настройки в конце не будут срабатывать.

мне также пришлось добавить параметр:

xdebug.remote_port = 9000

Иногда при включенном Xdebug phpmyadmin начинает жутко притормаживать. Лечится это изменением параметров

xdebug.profiler_enable = 1 переписываем в xdebug.profiler_enable = 0

также я добавил параметр

xdebug.collect_return=0

Для работы отладки в Netbeans нужно:
находим параметр output_buffering
для отладки в netbeans он должен быть output_buffering=Off

Проверяем работает ли xdebug запустив http://localhost/xampp/phpinfo.php, находим на странице блок с описанием Xdebug, если нашли значит xdebug запущен.

При проблемах с xdebug может помочь такой простой код:

1
2
3
4
5
6
7
8
9
<?php 
 
$address = '127.0.0.1'; 
$port = 9000; 
$sock = socket_create(AF_INET, SOCK_STREAM, 0); 
socket_bind($sock, $address, $port) or die('Unable to bind'); 
socket_listen($sock); $client = socket_accept($sock); 
echo "connection established: $client"; 
socket_close($client); socket_close($sock); 
<?php 

$address = '127.0.0.1'; 
$port = 9000; 
$sock = socket_create(AF_INET, SOCK_STREAM, 0); 
socket_bind($sock, $address, $port) or die('Unable to bind'); 
socket_listen($sock); $client = socket_accept($sock); 
echo "connection established: $client"; 
socket_close($client); socket_close($sock); 

Создаем файл с данным кодом у себя на локальном сервере и запускаем его через командную строку
например: C:\путь_к_пхп\php.exe C:\путь_к_серверу\xdebug_test.php

После этого запускаем отладочную сессию
например так: http://localhost/index.php?XDEBUG_SESSION_START=mysession

Смотрим на показания в командной строке, там могут появится сообщения которые помогут разобраться в чем проблема или сообщение в виде:
"connection established: Resource id #5" что будет означать что все нормально.

Если сообщений долго никаких не появляется значит неправильно настроен порт, например в скрипте указан 9000 а в настройка xdebug другой.

Еще не забываем обновлять NetBeans. Иногда нужно следить за версиями Xdebug и их совместимостью с вашей версией php изучаем список - https://xdebug.org/download.php

 

Другие настройки:
для работы короткого тэга php " short_open_tag=On
Лучше поставить этот параметр. По некоторым правилам оформления кода позволяется его использование. А многие разработчики используют его с правилами или без и будет много нерв потрачено когда установите стороний код а он не работает потому что где то в коде автор использовал " Параметры -> PHP -> Отладка", ничего менять не нужно, если до этого все настроили данными по умолчанию. Просто посмотрите на настройки и запомните что где можно настроить.

Советы:
В проект который загружаете в Netbeans не вставляйте стандартные библиотеки и фрамеворки, вынесите их за пределы рабочей папки, это во многом увеличит скорость работы Netbeans. К тому же Netbeans умеет работать с популярными фрамеворками и без непосредственного включения их файлов в проект, например Yii, Symfony.

В "Сервис -> Параметры -> Редактир -> Форматирование" поставьте галочку для категории "Табуляция и отступы" на параметре "Заменить табуляции пробелами". Это делает ваш код подходящим по стандартам кодирования. Просто на некоторых системах код с табуляциями смотрится некорректно, а если использовать пробелы то у всех смотрится хорошо, потому и стандарт.