如何调试用 PHP 编写的 Web 服务?
我有一个很好的问题:)
我需要调试用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
嗯,我是在回答我自己。
如果我们使用 PHPEd & DBG,那么我们就可以使用神奇函数DebugBreak()了。
确保 PHPEd & PHP DBG Listenere 正在运行,
在 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
anywhere in your werbservice's code, make a call from the client, and voila! - you are in PHPEd on that line in debugging mode!
您可以将 xdebug.remote_autostart 设置为 1 以始终进行调试(不需要请求参数)。这可能仅限于带有的某些 url。或<文件>指示。
或者只是使用 var_export 记录一些调试信息(如果您想要通用库,请使用 Zend_Log 或 Pear Log)。
快速而肮脏的方法是:
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:
您可以将数据写入日志文件(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.
尝试 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.
我似乎记得您可以将 NuSphere 的产品配置为自动尝试使用或不使用 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.
For a little more initial setup, but lower friction debugging later:
我使用插件 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