代码之家  ›  专栏  ›  技术社区  ›  nightcoder

如何调试用php编写的web服务?

  •  1
  • nightcoder  · 技术社区  · 15 年前

    我有个好问题:)

    我需要调试用php编写的web服务。它的客户是用c写成的。
    经过几天的搜索,我意识到这不是一个容易的任务。至少没人知道正确的解决方案。

    到底是什么问题?
    我们有两个流行的php调试库:来自nusphere的php调试器和xdebug扩展。
    问题是它们都是通过url查询字符串或借助cookies来控制的。例如,要使用php调试器启用调试,您需要添加?dbgsessid=xxx参数到您的url或具有dbgsessid cookie。
    但是当从外部客户机调用web服务时,客户机没有cookie,也没有添加dbgsessid url参数。那么在这种情况下我们如何调试呢?

    另外,我不想写入日志文件,请参阅请求和响应头/数据或类似的内容。我需要正常的分步调试和断点。

    有人吗?

    6 回复  |  直到 12 年前
        1
  •  4
  •   nightcoder    15 年前

    好吧,我是在自言自语。 如果我们使用phped&dbg,那么我们可以使用神奇的函数debugbreak()。

    确保phped&php dbg listener正在运行,写入

    DebugBreak('1@127.0.0.1');
    

    在你的WerbService代码中的任何地方,从客户端打个电话,然后瞧!-你在那条线上处于调试模式!

        2
  •  2
  •   user262976    15 年前

    你可以设定 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));
    
        3
  •  0
  •   St. John Johnson    15 年前

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

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

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

        4
  •  0
  •   Joe Mastey    15 年前

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

        5
  •  0
  •   Dathan    15 年前

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

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

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

    1. 配置客户端以访问备用URL。
    2. 设置一个代理来监听那个url(为了调试,我已经看到 Privoxy 推荐,虽然我个人没有这方面的经验)。
    3. 配置代理将所有请求转发到真正的web服务,附加适当的dbgsessid参数或包含cookie
        6
  •  0
  •   Michael B.    12 年前

    我用这个插件 Poster 帮助调试我的php web服务

    编辑:

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

    它是一个chrome插件,非常适合测试使用rest的所有web服务