我在这里有一个很好的问题:)
我需要调试用PHP编写的Web服务。它的客户端是用C#编写的 经过几天的搜索,我意识到这不是一件容易的事。至少看来没有人知道正确的解决方案。
实际上是什么问题?
我们有两个流行的PHP调试库:NuSphere的PHP Debugger和XDebug扩展
问题是它们都是通过URL查询字符串或cookie的帮助来控制的。例如,要使用PHP调试器启用调试,您需要将?DBGSESSID = xxx参数添加到您的URL或具有DBGSESSID cookie。
但是,当从外部客户端调用Web服务时,客户端没有cookie并且不添加DBGSESSID url参数。那么我们如何在这种情况下进行调试呢?
PS。我不想写日志文件,请参阅请求和响应标头/数据或类似的东西。我想要正常的逐步调试和断点。
任何?
答案 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中)连接到调试侦听器。不过,如果情况确实如此,我并不乐观。但是,您可以通过执行以下操作来获得您正在寻找的效果。它可能比你希望的手动密集一点。
稍微进行初始设置,但稍后进行较低的摩擦调试: