Как отладить веб-сервис, написанный на PHP? - PullRequest
1 голос
/ 17 марта 2010

У меня есть хороший вопрос:)

Мне нужно отладить мой веб-сервис, написанный на PHP. Его клиент написан на C #.
После нескольких дней поиска я понял, что это не легкая задача. По крайней мере, кажется, никто не знает правильного решения.

В чем проблема, собственно?
У нас есть 2 популярные библиотеки отладки PHP: PHP Debugger от NuSphere и расширение XDebug.
Проблема в том, что они оба управляются из строки запроса URL или с помощью куки. Например, чтобы включить отладку с помощью PHP Debugger, вам необходимо добавить параметр? DBGSESSID = xxx в свой URL или иметь файл cookie DBGSESSID.
Но когда ваш веб-сервис вызывается из внешнего клиента, клиент не имеет cookie и не добавляет параметр url DBGSESSID. Итак, как мы можем отладить в этой ситуации?

PS. Я не хочу писать в лог-файлы, просматривать заголовки / данные запросов и ответов или что-то в этом роде. Я хочу обычную пошаговую отладку и точки останова.

Любой

Ответы [ 6 ]

4 голосов
/ 20 марта 2010

Ну, я отвечаю самому себе. Если мы используем PHPEd & DBG, то мы можем использовать магическую функцию DebugBreak ().

Убедитесь, что PHPEd и PHP DBG Listenere запущены, напишите

DebugBreak('1@127.0.0.1');

в любом месте кода вашего werbservice, позвоните клиенту и вуаля! - вы находитесь в PHPEd на этой строке в режиме отладки!

2 голосов
/ 17 марта 2010

Вы можете установить xdebug.remote_autostart в 1 для постоянной отладки (параметр запроса не требуется). это может быть ограничено некоторым URL с помощью директивы или .

Или просто зарегистрируйте некоторую отладочную информацию (используя Zend_Log или Pear Log, если вам нужна универсальная библиотека), используя var_export.

быстрый и грязный путь это:

file_put_contents('/tmp/log1.txt',
  var_export(array($_REQUEST, $something), true));
0 голосов
/ 17 марта 2010

Кажется, я помню, что вы можете настроить продукт NuSphere для автоматической попытки подключения к прослушивателю отладки с параметром DBGSESSID или без него (в строке запроса или файле cookie). Я не уверен, если это так, хотя. Тем не менее, вы можете получить эффект, который вы ищете, сделав следующее. Это может быть немного более интенсивным, чем вы ожидаете.

  1. Настройка прослушивателя HTTP-запросов / ответов.
  2. Выполнить требуемый доступ к веб-службе с клиента.
  3. Вручную повторно выполнить эти запросы, добавив соответствующий DBGSESSID

Для более начальной настройки, но с более низкой отладкой трения позже:

  1. Настройте клиент для доступа к альтернативному URL.
  2. Настройте прокси для прослушивания этого URL (для отладки я видел Privoxy рекомендуется, хотя лично у меня нет опыта работы с ним).
  3. Сконфигурируйте прокси для пересылки всех запросов в реальный веб-сервис, добавив соответствующий параметр DBGSESSID или включив куки
0 голосов
/ 17 марта 2010

Попробуйте SoapUI , чтобы выдавать запросы вручную и получать подробные ответы. Не уверен, что вы можете подделать cookie, но вы можете контролировать конечные точки и, следовательно, URL-адрес в некоторой степени.

0 голосов
/ 17 марта 2010

Вы можете записать данные в файл журнала (meh) .

Или выводить отладочную информацию в заголовки ответа (если клиент может их просматривать). Но что касается использования точек останова, вам может не повезти.

Вы также можете посмотреть на перехват соединения на вашем локальном компьютере (что-то похожее на данные несанкционированного доступа Firefox), где вы можете прервать запрос и добавить параметр url.

0 голосов
/ 17 марта 2010

Я использую плагин Плакат , чтобы помочь отладить мой php Webservice

Редактировать:

Найден лучший инструмент для отладки веб-службы: Расширенное клиентское приложение REST

Это плагин Chrome, отлично работает для тестирования всех видов веб-сервисов, использующих REST

...