Xdebug PhpStorm: сценарии отладки запущены с exe c ("php index. php") - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь добавить отладку в старый проект, который использует exec() для асинхронного запуска нового сеанса из другого сценария PHP:

exec("php /var/www/html/validata/index.php",$result) 

Обычный сценарий PHP полностью отладка с помощью Xdebug, но сценарий, запущенный с помощью команды exe c, не потому, что он не может отобразить из file:///var/www/html/index.php в локальное расположение файла, поскольку он запущен в оболочке CLI. Сеанс, начатый таким образом, запускает отладчик, но не может найти файл локально:

Cannot find file '/var/www/html/validata/index.php' locally.
To fix it set server name by environment variable PHP_IDE_CONFIG and restart debug session.

Я следовал инструкциям, чтобы добавить PHP_IDE_CONFIG в env. Я также добавил это на сервер с 127.0.0.1, замененным на IP-адрес P C рабочего стола (сервер работает в контейнере docker):

export XDEBUG_CONFIG="remote_enable=1 remote_mode=req remote_port=9000 remote_host=127.0.0.1 remote_connect_back=0"

Любые указатели очень ценятся!

ОБНОВЛЕНИЕ

Решение:

Используйте интерпретатор cli, установленный для контейнера docker (в настройках> Языки и Frameworks> PHP> Интерпретатор CLI, добавьте новый, выберите docker и укажите его на двоичный файл php), чтобы сеанс отладки можно было начать с новой конфигурацией отладки. Я скопировал аргументы из команды exe c в новую конфигурацию, и теперь он может полностью отлаживать скрипт. Мне нужно подготовить таблицу базы данных, чтобы она была полностью тестируемой, но для меня это рабочее решение.

Спасибо за все ответы!

1 Ответ

0 голосов
/ 12 марта 2020

Вы можете решить проблему с загрузкой неправильного php .ini файла, указав его в командной строке:

exec("php -c " . escapeshellarg(php_ini_loaded_file()) .
    " /var/www/html/validata/index.php",$result);

Хотя я сомневаюсь, что это будет иметь большое значение для xdebug

Я думаю, что лучшим решением было бы просто require файл, из-за которого xdebug не терялся бы при форке нового процесса.

require_once "/var/www/html/validata/index.php";
...