Отладка POST-запроаса

Slon747

Новичок
Open Server
Visual Studio Code + Xdebug
На скрипт передается POST-запрос.
Реально ли в отладчике трассировать выполнение скрипта или нужно имитировать процесс, считывая файл с содержимым запроса?
 

WMix

герр M:)ller
Партнер клуба
на счет Visual Studio Code не знаю точно, тк не пользуюсь, но не думаю что там проблема - реально
 

Valick

Новичок
Сама постановка вопроса вызывает когнитивный диссонанс.
В Xdebug уже видно глобальные массивы в том числе и $_POST. Если надо работать с пост на пару уровней ниже, то возможно нужны какие-то снифферы.
Но повторюсь, сам вопрос не совсем понятен.
 

Slon747

Новичок
В Visual Studio Code открываю php-скрипт и нажимаю кнопку "Debug PHP".
На точке останова вижу значения переменных.
Но это потому что я запустил скрипт из IDE.
Мне же требуется отладить обработку данных, полученных через POST.
Можно ли как-то перехватить это?
 

Valick

Новичок
Slon747, просто сделай html форму. В качестве action укажи url своего скрипта. Посылай POST данные из браузера и лови их у себя иксдебагом.
 

Slon747

Новичок
Slon747, просто сделай html форму. В качестве action укажи url своего скрипта. Посылай POST данные из браузера и лови их у себя иксдебагом.
Пробую пока просто перехватывать запрос из браузере, без параметров:
PHP:
<?
$var = 100;
print "hello: ".$var;
?>
Если запускаю скрипт из Visual Studio Code, то брекпойнт срабатывает.
Если же из браузера запускаю, то не срабатывает.
Пробовал как обычный браузер, так и Opera из меню "Open Server ->Программы->Opera".
 

Slon747

Новичок
Может у меня неправильно настроен xdebug?

Вот такая секция в php.ini:

[xdebug]
zend_extension = C:\OSPanel\modules\php\PHP_7.2\ext\php_xdebug.dll
xdebug.remote_enable=1
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_autostart=on
xdebug.remote_handler=dbgp
xdebug.profiler_enable=1
xdebug.profiler_output_dir="C:\xampp\tmp"
xdebug.remote_log ="C:\xampp\tmp\xdebug.log"
 

WMix

герр M:)ller
Партнер клуба
настройка она от того и настройка, что ее каждый настраивает иначе,
вопрос больше а под что ты настраивал (как вызываешь, как сообщаешь ide чтоб она среагировала)
 

Slon747

Новичок
вопрос больше а под что ты настраивал (как вызываешь, как сообщаешь ide чтоб она среагировала)
В тот то и дело, что я не знаю, как перехватить вызов из браузера http:\\localhost\test.php.
Если это получится, то, думаю, и все остальное тоже.
 

Slon747

Новичок
Почитал, так прописал параметры в php.ini:
[xdebug]
zend_extension = C:\OSPanel\modules\php\PHP_7.2\ext\php_xdebug.dll
xdebug.idekey = "code"
xdebug.remote_autostart=1 ;// добавил это чтобы можно было запускать отладку без параметра XDEBUG_SESSION_START
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.mode=develop
xdebug.start_with_request= "yes"
xdebug.client_host = "localhost"
xdebug.client_port = 9003

Перезапустил сервер
Установил плагин на Crome, запустил плагин в режиме debug, открыл страницу http://localhost/test.php?XDEBUG_SESSION_START=code
Брейкпоинт не сработал


На самом деле мне нужно не в браузере вызывать скрипт, а через собственное андроид-приложение, которое будет передавать на сервер данные. Но сначала хотел добиться того, чтобы хотя бы с браузером работала отладка.
 
Последнее редактирование:

weregod

unserializer
PHP:
var_dump($_POST);
уже не помогает, или задача прикрутить отладку к IDE? Если последнее, то не смогу помочь, VS Code только на пощупать стоит, сильно PhpStotrm проигрывает.
 

Slon747

Новичок
PHP:
var_dump($_POST);
уже не помогает, или задача прикрутить отладку к IDE? Если последнее, то не смогу помочь, VS Code только на пощупать стоит, сильно PhpStotrm проигрывает.
Хочется полноценной трассировки.
VS Code начал пробовать, погуглив как "самая распространенная IDE для PHP".
Попробую PhpStorrm, может получится.
 

Slon747

Новичок
Поставил PhpStorrm, почитал про настройку.
Прописал интерпретатор из "Open Server", высветился xdebug.
Создал скрипт, запустил отладку. Брекпойнт сработал.
Из IDE открыл хром со скриптом, включил debug у плагина. В шторме включил слушатель, обновил страницу в браузере, брекпойнт не отрабатывает (и не высветилось окно подтверждения подключения отладки, как в ютуб-ролике).
 

Valick

Новичок
Поставил PhpStorrm, почитал про настройку
Почитайте гайды из разных источников, достаточно будет настроить один раз, зато потом уже никогда не вернётесь к var_dump();
VS Code начал пробовать, погуглив как "самая распространенная IDE для PHP"
это какой-то сюр
для РНР нет и скорее всего не будет IDE лучше чем PhpStorrm
 

Slon747

Новичок
PhpStorrm (+ xdebug) может перехватывать вызов скрипта не из браузера, а просто, по какому-либо порту?
Т.е. из локальной сети идет запрос к http-серверу, его перехватить и трассировать строки скрипта?
 

Valick

Новичок
Грубо говоря xdebug это надстройка над РНР, ему плевать кто там и откуда идёт. У меня 2 варианта xdebug настроены, под докер и для удалённого сервера (с пробросом туннеля). Про остальные я даже не знаю, мне их не надо.
Я уже давно не использую Open Server (хотя по прежнему считаю, что это лучшее решение для windows) и саму Windows.
По настройке xdebug на опен сервере у меня какие-то очень смутные воспоминания. Кажется, что это было в какой-то прошлой жизни.
А вот Eclipse пол года назад настраивал. Но до PhpShtorm ему как до пекина раком.
Может на новогодних праздниках будет время для того что бы вам помочь с настройкой.
 
Последнее редактирование:

Slon747

Новичок
Получилось!
Получилось перехватывать запросы из Postman в VSCode.
Изначально в Open Server была включена версия PHP 7.2, с ней шла xdebug 3.
Когда понизил версию PHP до 7.0 (в ней xdebug 2), перехват заработал.
Не знаю почему не работает с 3-й версией xdebug. В ней порт по-умолчанию 9003 вместо 9000. Менял в launch.json на 9003, не помогало.
Всем спасибо!
 
Последнее редактирование:
Сверху