Я устанавливаю 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:
Для отладки 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
клиент (при условии, что он слушает).
Итак, после обширного тестирования различных настроек, вот мои предложения по устранению проблемы для людей, которые приходят за мной:
Не полагайтесь на тестирование только с 1 клиентом xdebug! Это тривиально установить два редактора / IDE, так что получите альтернативный редактор работает, чтобы увидеть, есть ли проблема с xdebug или с конкретным клиентом!
Может быть 3 местоположения, которые несут конфигурацию для комбинации клиента xdebug + xdebug! Конфигурация клиента (или плагина редактора), файл 20-xdebug-conf.ini (или в эквиваленте php.ini) и конфигурация вашего проекта. Убедитесь, что все 3 местоположения синхронизированы в терминах port, path_mapping и т. Д.