Xdebug не может подключиться к клиенту, с чего начать отладку?

Я устанавливаю xdebug для php в пределах возвышенного текста, и xdebug продолжает регистрировать ошибки, связанные с невозможностью подключения:

Log opened at 2016-08-18 21:06:01
I: Connecting to configured address/port: localhost:9988.
E: Could not connect to client. :-(
Log closed at 2016-08-18 21:06:01

Я надеялся, что отладка напрямую, перейдя к http://localhost:9988 в моем браузере может помочь, но он просто отображает страницу ошибки Google Chrome: «localhost отказался подключиться». Возможно, существует ошибка на другом конце, что данные не могут быть переданы клиенту возвышенного текста, я не знаю. Возвышенный текст xdebug действительно показывает сообщение «Reloading /var/log/xdebug/xdebug.log», когда я запускаю тесты / etc, так что, похоже, он знает о выполняемом коде php, просто дальше не идет.

Итак, я никогда не думал, что мне придется отлаживать сам xdebug, но: как я могу отладить соединение xdebug с редактором кода? Если бы это был nginx, я бы начал отлаживать виртуальный хост, но так как это xdebug … … Я понятия не имею, с чего начать отладку из-за отсутствия приложения для подключения?

## Различные настройки конфигурации ##

Я на Ubuntu Linux 14.04.

Вот мой конф xdebug.ini, если уместно:

[xdebug]
xdebug.default_enable=1
xdebug.remote_enable=1
xdebug.remote_autostart=1
xdebug.remote_host="localhost"xdebug.remote_handler="dbgp"xdebug.remote_port=9988
xdebug.remote_mode = req
xdebug.overload_var_dump=0
xdebug.idekey = sublime.xdebug
xdebug.remote_log="/var/log/xdebug/xdebug.log";https://github.com/martomo/SublimeTextXdebug

Xdebug установлен:

apt-cache policy php-xdebug
php-xdebug:
Installed: 2.4.0-5+donate.sury.org~trusty+1
Candidate: 2.4.0-5+donate.sury.org~trusty+1
Version table:
*** 2.4.0-5+donate.sury.org~trusty+1 0
500 http://ppa.launchpad.net/ondrej/php/ubuntu/ trusty/main amd64 Packages
100 /var/lib/dpkg/status

Модуль активен:

php -m | grep -i xdebug
xdebug
Xdebug

Настройки phpinfo xdebug:

Настройки xdebug через phpinfo

12

Решение

Для отладки PHP требуются два компонента, которые взаимодействуют: расширение PHP, которое действует как сервер, и программное обеспечение, которое знает, как взаимодействовать с этим расширением и управлять его функциональными возможностями (это клиент).

Однако, несмотря на обычные клиент-серверные протоколы, когда клиент подключается к серверу, отладчик PHP работает наоборот: сервер подключается к клиенту (его следует запустить и прослушивать через порт 9000).

xdebug является наиболее известным расширением PHP для отладки. Есть много программ и программных расширений / плагинов, которые действуют как клиенты для этого. Я не работал с пакетом Xdebug для Sublime (я не работал с Sublime, во-первых), но принципы те же.

Как работает сеанс отладки?

Клиентское программное обеспечение (Sublime с пакетом Xdebug в вашем случае) начинает прослушивать порт 9000 из localhost, в ожидании сервера, чтобы начать соединение. Вероятно, он не слушает порт все время, но только когда разработчик говорит об этом.

Вы запускаете скрипт PHP для отладки. xdebug не включает все запросы к серверу, но только когда он находит маркер в запросе. В зависимости от SAPI, используемого для запуска сценария, маркер является либо переменной среды (для сценариев CLI), либо файлом cookie, либо GET или же POST аргумент (для веб-страниц). Читайте больше на «Запуск отладчика» раздел документации.

Когда интерпретатор PHP начинает выполнение сценария PHP, если xdebug находит маркер, описанный выше, затем пытается подключить xdebug клиент. В противном случае он остается в стороне и позволяет скрипту работать на полной скорости.

Когда маркер отладки присутствует в среде, xdebug расширение (сервер) пытается подключиться к xdebug клиент (по умолчанию на порту 9000 из localhost но эти настройки могут быть изменены по мере необходимости). Если он не может подключиться (потому что клиент не слушает), он регистрирует ошибку, затем убирает себя с пути и позволяет скрипту работать на полной скорости.

После успешного подключения к клиенту xdebug Расширение PHP либо останавливается перед выполнением первого оператора скрипта PHP, либо запускает скрипт, пока его выполнение не достигнет точки останова. Это поведение и список точек останова отправляются клиентом на сервер во время их первоначального обмена данными при установлении соединения. Затем расширение ожидает команды от клиента. Клиент отображает разработчику текущее состояние запущенного сценария (следующий оператор для выполнения, значения переменных в текущей области и т. Д.) И ожидает команды (выполнить следующий оператор, продолжить, добавить / удалить точки останова, посмотреть некоторую переменную). так далее).

Почему это не работает для вас?

Из вашего вопроса мне не очень понятно, но я предполагаю, что вы запускаете веб-сервер (с интерпретатором PHP и xdebug расширение) на том же компьютере, на котором вы запускаете xdebug клиент (localhost). Если это не так, не отчаивайтесь. Решение — это командная строка (читайте в конце ответа).

Из информации, которую вы разместили в вопросе, ясно, что xdebug установлен, включен и работает правильно. Выход из telnet localhost 9988 говорит, что никто не слушает порт 9988, xdebug клиент должен слушать там.

Я никогда не работал с Sublime Text (и его пакетами). Эта статья объясняет, как установить и заставить его работать. Тем не менее, это не объясняет, как настроить его для прослушивания через порт 9988,

Я бы начал с установки PHP xdebug расширение для подключения к порту по умолчанию (9000):

xdebug.remote_port=9000

а затем, если все работает, я бы попытался выяснить, как настроить Sublime Text xdebug пакет для прослушивания на другом порту. Вы действительно нуждаетесь в этом, чтобы слушать на другом порту?

Что делать, если веб-сервер и xdebug клиент на разных компьютерах?

Если вам нужно отладить скрипт PHP, который выполняется на удаленной машине, xdebug клиент слушает на локальной машине (по порту 9000) и xdebug расширение пытается подключиться к порту 9000 на удаленной машине. Решение, которое возможно в интрасетях и VPN — это настроить xdebug подключиться к порту 9000 локального компьютера, но, помимо этих условий, обычно также требуются изменения в брандмауэре и / или другом программном обеспечении безопасности.

Самый простой способ отладки скриптов PHP в этой ситуации если у вас есть ssh доступ к удаленной машине это создать ssh туннель из порта 9000 удаленной машины в порт 9000 локальной машины.

Предполагая, что вы используете ssh для подключения к удаленной машине (чтобы поместить файлы на нее), все, что вам нужно сделать, это добавить -R 9000:localhost:9000 в командной строке, которую вы используете для подключения и запуска ssh сеанс на удаленной машине.

Пока это соединение открыто, любой запрос на соединение через порт 9000 (первый 9000 в командной строке выше) удаленного компьютера (-R) переправляется через туннель в порт 9000 (второй 9000 из командной строки) локальной машины (localhost). Вот так пульт xdebug Расширение PHP может связаться с удаленным xdebug клиент (при условии, что он слушает).

14

Другие решения

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

  1. Не полагайтесь на тестирование только с 1 клиентом xdebug! Это тривиально установить два редактора / IDE, так что получите альтернативный редактор работает, чтобы увидеть, есть ли проблема с xdebug или с конкретным клиентом!

  2. Может быть 3 местоположения, которые несут конфигурацию для комбинации клиента xdebug + xdebug! Конфигурация клиента (или плагина редактора), файл 20-xdebug-conf.ini (или в эквиваленте php.ini) и конфигурация вашего проекта. Убедитесь, что все 3 местоположения синхронизированы в терминах port, path_mapping и т. Д.

1

По вопросам рекламы [email protected]