Удаленная отладка Xdebug+PhpStorm

PHP PhpStorm

Среда разработки:

本地 Windows10 日常开发使用的环境 装有PHPStorm 

远程主机 Linux  服务器 装php-fpm/nginx等所有开发依赖环境

本地可以访问远程主机 但远程主机无法访问本地 

Цель

远程调试(remote debug)在windows本地环境下 调试远程服务器(Linux)上的代码

проблема

之前一直认为 php-xdebug 的扩展的remote_debug 只能够支持本地环境下调试

其实原因是没有准备好调试环境  (远程的服务器上无法访问到本地的调试端口 需要通过ssh隧道端口映射 建立连接)

其client 和 server 的对应关系如下图 

xdebug client 和 server 的对应关系如下图

Локальный PHPSTORM откроет службу отладки после включения службы точки останова (порт по умолчанию — 9000).

Используется для связи с сервером через DBGP

Но локальная среда находится в локальной сети, сервер не может напрямую получить доступ к порту отладки IDE через IP.

шаг

1. Установите расширение php_xdebug на удаленном хосте.

2. Измените файл конфигурации php.ini и перезапустите php-fpm.

phpinfo信息

[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"