1

我在这里有一个很好的问题:)

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

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

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

任何人?

4

6 回答 6

4

好吧,我在回答自己。如果我们使用 PHPEd & DBG,那么我们可以使用魔术函数 DebugBreak()。

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

DebugBreak('1@127.0.0.1');

在您的 werbservice 代码中的任何位置,从客户端拨打电话,瞧!- 你在调试模式下在那条线上的 PHPEd 中!

于 2010-03-20T17:15:18.177 回答
2

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

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

快速而肮脏的方法是:

file_put_contents('/tmp/log1.txt',
  var_export(array($_REQUEST, $something), true));
于 2010-03-17T20:33:38.803 回答
0

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

编辑 :

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

这是一个 Chrome 插件,非常适合测试使用 REST 的各种网络服务

于 2010-03-17T20:25:25.923 回答
0

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

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

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

于 2010-03-17T20:25:25.997 回答
0

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

于 2010-03-17T20:27:16.650 回答
0

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

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

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

  1. 将您的客户端配置为访问备用 URL。
  2. 设置一个代理来监听那个 URL(为了调试,我看过Privoxy推荐,虽然我个人没有经验)。
  3. 配置代理以将所有请求转发到真实的 Web 服务,附加适当的 DBGSESSID 参数或包括 cookie
于 2010-03-17T20:36:30.730 回答