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

时间:2010-03-17 20:21:51

标签: php web-services debugging xdebug

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

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

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

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

任何?

6 个答案:

答案 0 :(得分:4)

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

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

DebugBreak('1@127.0.0.1');
在您的werbservice代码中的任何地方,都可以从客户端拨打电话,瞧! - 你在调试模式的那条线上的PHPEd!

答案 1 :(得分:2)

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

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

快速而肮脏的方式是:

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

答案 2 :(得分:0)

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

编辑:

找到了一个更好的调试Web服务的工具:Advanced REST client Application

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

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

尝试SoapUI手动发出请求并获取详细回复。不确定是否可以伪造cookie,但是您可以控制端点,从而控制URL的范围。

答案 5 :(得分:0)

我似乎记得您可以将NuSphere的产品配置为自动尝试使用或不使用DBGSESSID参数(在查询字符串或cookie中)连接到调试侦听器。不过,如果情况确实如此,我并不乐观。但是,您可以通过执行以下操作来获得您正在寻找的效果。它可能比你希望的手动密集一点。

  1. 设置某种HTTP查询/响应侦听器。
  2. 从客户端对Web服务执行所需的访问。
  3. 手动重新发出这些请求,附加相应的DBGSESSID
  4. 稍微进行初始设置,但稍后进行较低的摩擦调试:

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