如何调试用 PHP 编写的 Web 服务?

发布于 2024-08-25 17:12:20 字数 446 浏览 7 评论 0原文

我有一个很好的问题:)

我需要调试用 PHP 编写的 Web 服务。它的客户端是用C#编写的。
经过几天的搜索,我意识到这不是一件容易的事。至少看起来没有人知道正确的解决方案。

实际上问题出在哪里?
我们有 2 个流行的 PHP 调试库:来自 NuSphere 的 PHP 调试器和 XDebug 扩展。
问题是它们都是通过 URL 查询字符串或借助 cookie 进行控制的。例如,要使用 PHP 调试器启用调试,您需要将 ?DBGSESSID=xxx 参数添加到您的 URL 或拥有 DBGSESSID cookie。
但是,当从外部客户端调用您的 Web 服务时,客户端没有 cookie,也不会添加 DBGSESSID url 参数。那么遇到这种情况我们该如何调试呢?

PS。我不想写入日志文件,查看请求和响应标头/数据或类似的内容。我想要正常的逐步调试和断点。

有人吗?

I've got a nice question here :)

I need to debug my web service written in PHP. Its client is written in C#.
After a couple of days of searching I realized this is not an easy task. At least it seems nobody knows the right solution.

What is the problem in, actually?
We have 2 popular PHP debugging libraries : PHP Debugger from NuSphere and XDebug extension.
The problem is they both are controlled from URL query string or with the help of cookies. For example, to enable debugging with PHP Debugger you need to add ?DBGSESSID=xxx parameter to your URL or to have DBGSESSID cookie.
But when your web service is called from the external client, the client doesn't have a cookie and doesn't add DBGSESSID url parameter. So how can we debug in this situation?

PS. I don't want to write to log files, see request and response headers/data or something like this. I want normal step-by-step debugging and breakpoints.

Anyone?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

梦里梦着梦中梦 2024-09-01 17:12:21

嗯,我是在回答我自己。
如果我们使用 PHPEd & DBG,那么我们就可以使用神奇函数DebugBreak()了。

确保 PHPEd & PHP DBG Listenere 正在运行,

DebugBreak('[email protected]');

在 werbservice 代码中的任意位置编写,从客户端进行调用,瞧! - 您在 PHPEd 的该行中处于调试模式!

Well, I am answering to myself.
If we use PHPEd & DBG, then we can use the magic function DebugBreak().

Make sure PHPEd & PHP DBG Listenere are running, write

DebugBreak('[email protected]');

anywhere in your werbservice's code, make a call from the client, and voila! - you are in PHPEd on that line in debugging mode!

我爱人 2024-09-01 17:12:21

您可以将 xdebug.remote_autostart 设置为 1 以始终进行调试(不需要请求参数)。这可能仅限于带有的某些 url。或<文件>指示。

或者只是使用 var_export 记录一些调试信息(如果您想要通用库,请使用 Zend_Log 或 Pear Log)。

快速而肮脏的方法是:

file_put_contents('/tmp/log1.txt',
  var_export(array($_REQUEST, $something), true));

you could set xdebug.remote_autostart to 1 to always debug (no request parameter needed). this could be limited to some url with the <Location> or <Files> directive.

Or just log some debug information (using Zend_Log or Pear Log if you want a generic library) using var_export.

quick and dirty way is:

file_put_contents('/tmp/log1.txt',
  var_export(array($_REQUEST, $something), true));
梦毁影碎の 2024-09-01 17:12:21

您可以将数据写入日志文件(meh)

或者在响应头中输出调试信息(如果客户端可以查看它们)。但就使用断点而言,你可能会不走运。

您还可以研究本地计算机上的连接劫持(类似于 Firefox AddOn Tamper Data),您可以在其中中断请求并添加 url 参数。

You could write data to a log file (meh).

Or output debugging information in response headers (if the client can view them). But as far as using breakpoints, you may be out of luck.

You could also look into connection hijacking on your local computer (something similar to the Firefox AddOn Tamper Data) where you can interrupt the request and add the url parameter.

绾颜 2024-09-01 17:12:21

尝试 SoapUI 手动发出请求并获取详细响应。不确定是否可以伪造 cookie,但您可以在一定程度上控制端点,从而控制 URL。

Try SoapUI to issue requests manually and get the detailed responses. Not sure if you can fake the cookie, but you can control the endpoints, and therefore the URL to an extent.

温柔戏命师 2024-09-01 17:12:21

我似乎记得您可以将 NuSphere 的产品配置为自动尝试使用或不使用 DBGSESSID 参数(在查询字符串或 cookie 中)连接到调试侦听器。但我并不肯定情况是否如此。但是,您可以通过执行以下操作来获得所需的效果。它可能比您希望的需要更多的手动操作。

  1. 设置某种 HTTP 查询/响应侦听器。
  2. 从客户端对 Web 服务执行所需的访问。
  3. 手动重新发出这些请求,附加适当的 DBGSESSID

对于更多的初始设置,但稍后进行较低的调试:

  1. 配置您的客户端以访问备用 URL。
  2. 设置一个代理来侦听该 URL(为了调试,我已经看到推荐 Privoxy ,尽管我没有亲身经历)。
  3. 配置代理以将所有请求转发到真实的 Web 服务,附加适当的 DBGSESSID 参数或包含 cookie

I seem to remember that you can configure NuSphere's product to automatically attempt to connect to the debug listener with or without the DBGSESSID parameter (in query string or cookie). I'm not positive if that's the case, though. However, you can get the effect you're looking for by doing the following. It may be a little more manually intensive than you're hoping for.

  1. Setup some sort of HTTP query/response listener.
  2. Perform desired access against web service from client.
  3. Manually re-issue those requests, appending the appropriate DBGSESSID

For a little more initial setup, but lower friction debugging later:

  1. Configure your client to access an alternate URL.
  2. Setup a proxy to listen on that URL (for debugging, I've seen Privoxy recommended, though I have no experience with it personally).
  3. Configure the proxy to forward all requests to the real web service, appending an appropriate DBGSESSID parameter or including the cookie
╄→承喏 2024-09-01 17:12:21

我使用插件 Poster 来帮助调试我的 php Webservice

编辑:

找到更好的调试 Web 服务的工具:高级 REST 客户端应用程序

这是一个 Chrome 插件,非常适合测试所有使用 REST 的 Web 服务

I use the plugin Poster to help debug my php Webservice

Edit :

Found a better tool to debug web service : Advanced REST client Application

It's a Chrome Plugin, works great to test all kind of web services that use REST

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文