Среда разработки:
本地 Windows10 日常开发使用的环境 装有PHPStorm
远程主机 Linux 服务器 装php-fpm/nginx等所有开发依赖环境
本地可以访问远程主机 但远程主机无法访问本地
Цель
远程调试(remote debug)在windows本地环境下 调试远程服务器(Linux)上的代码
проблема
之前一直认为 php-xdebug 的扩展的remote_debug 只能够支持本地环境下调试
其实原因是没有准备好调试环境 (远程的服务器上无法访问到本地的调试端口 需要通过ssh隧道端口映射 建立连接)
其client 和 server 的对应关系如下图
Локальный PHPSTORM откроет службу отладки после включения службы точки останова (порт по умолчанию — 9000).
Используется для связи с сервером через DBGP
Но локальная среда находится в локальной сети, сервер не может напрямую получить доступ к порту отладки IDE через IP.
шаг
1. Установите расширение php_xdebug на удаленном хосте.
2. Измените файл конфигурации php.ini и перезапустите php-fpm.
[xdebug]
zend_extension=/webser/soft/php72/lib/php/extensions/xdebug.so
xdebug.remote_enable=1
xdebug.remote_port=9001
xdebug.remote_host=127.0.0.1
xdebug.remote_log=/var/log/php-xdebug.log
xdebug.idekey="PHPSTORM"
Затем проверьте информацию phpinfo, чтобы убедиться, что конфигурация вступила в силу.
3. Установите ssh-туннель между локальным и удаленным хостами > перенос портов, чтобы удаленный хост мог получить доступ к порту 9001 IDE.
Введите команду telnet на удаленном хосте # Telnet 127.0.0.1 9001, чтобы проверить, можно ли получить доступ к порту 9001
(Здесь из-за конфликта портов значение по умолчанию 9000 изменено на 9001. php.ini соответствует конфигурации PHPSTORM)
4. Конфигурация отладки PHPSTORM
Добавьте сервер и настройте IDE KEY (должен соответствовать php.ini)
Наконец, нажмите на зеленого жука и телефон, чтобы открыть отладку и нажать точку останова.
Выполнить > Прервать первую строку в PHP-скриптах
5. Установите xdebug_helper или укажите IDEKey в запросе для запуска отладки.
Расширение: когда нам нужно включить xdebug в режиме командной строки, мы можем настроить session_key следующими способами.
## When running the script from the command line
## you need to set an environment variable, like:
Linux 环境中:
export XDEBUG_CONFIG="idekey=session_name"
php myscript.php
Windows 环境中:
set XDEBUG_CONFIG="idekey=session_name"