【问题标题】:How to debug a web service written in PHP?如何调试用 PHP 编写的 Web 服务?
【发布时间】:2010-03-17 20:21:51
【问题描述】:

我有一个很好的问题:)

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

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

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

有人吗?

【问题讨论】:

    标签: php web-services debugging xdebug


    【解决方案1】:

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

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

    DebugBreak('1@127.0.0.1');
    

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

    【讨论】:

    • 太好了,这很有帮助。效果很好。我正在测试一个 PayPal IPN 脚本并且需要这个。
    【解决方案2】:

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

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

    快速而肮脏的方法是:

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

    【讨论】:

    • 啊,xdebug.remote_autostart 是我想记住的。
    • 这是非常有价值的答案
    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

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

        更多的初始设置,但稍后调试的摩擦更少:

        1. 将您的客户端配置为访问备用 URL。
        2. 设置代理以侦听该 URL(为了调试,我看到推荐使用 Privoxy,尽管我个人没有这方面的经验)。
        3. 配置代理以将所有请求转发到真正的 Web 服务,附加适当的 DBGSESSID 参数或包括 cookie

        【讨论】:

          【解决方案6】:

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

          编辑:

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

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

          【讨论】:

          • 你把它用于基于 SOAP 的 web 服务还是 Restful 服务?
          • @nepsdotin,我不知道,我从不使用 SOAP,它们对于移动应用程序来说真的很糟糕。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多