PhpStorm 被动监听请求

PhpStorm passively listen to requests

我想使用 PhpStorm 10 和 xdebug 调试 php 脚本。我的设置如下:

  1. 客户端在python。客户端发送 json 数据。客户端的代码是(contact 是一个包含 json 的变量):

    conn = httplib.HTTPConnection('192.168.2.103:85')
    headers = {"Content-type": "application/json", "charset" : "utf-8"}
    body = json.dumps(contact, ensure_ascii = 'False')
    conn.request('POST', '/web_service/index.php', body, headers)
    response = conn.getresponse()
    
  2. 服务器端在php。在服务器端,我将 xdebug 设置如下:

    zend_extension = "E:\_Dizertatie\php\ext\php_xdebug.dll"
    xdebug.profiler_enable = 1
    xdebug.profiler_output_dir = "E:\_Dizertatie\tmp"
    xdebug.remote_enable =true
    xdebug.remote_host = "127.0.0.1"
    xdebug.remote_port = 9000
    

使用这个 guide and this page 我只能在启动 "start debug" 小书签时调试我的页面。我的 python 请求没有被 PhpStorm 的调试器捕获。我想被动地监听(不使用小书签)并在 php 调试器中捕获所有请求,无论它们的来源如何(python、移动、不同的 php 脚本)。

发送 python 请求时,是否有可用于调试 php 脚本的配置?

您需要告诉 xdebug 您要调试此请求。

这正是 bookmarkets/browser 扩展所做的——它们设置了与下一页请求一起发送的 xdebug cookie。您可以通过 XDEBUG_SESSION_START 将 cookie 替换为实际的 GET 或 POST 参数——例如将此类参数添加到您的 conn.request(... 行。


或者,您可以告诉 xdebug 自动调试每个请求(通过 php.ini 中的 xdebug.remote_autostart = 1),这可能是不需要的,并且可能有一些 "side effects"(如果调试客户端不可用,执行延迟大约 1 秒——xdebug 等待可能的客户端响应的时间)。这与您已经在使用的 zero config approach("phone handle" 图标)一致。

如果您正在使用此选项,请不要忘记在 php.ini 中进行更改后重新启动您的 Web 服务器(或 php-fpm,如果您正在使用它)。否则,这些更改不太可能在重新启动之前自动获取(在大多数设置中默认情况下)。


P.S. PhpStorm 具有内置的简单 REST Client 可通过 Tools | Test RESTful Web Service 访问,您可以使用它来发送自定义请求(而不是使用您的真实客户端(在您的情况下为 python 代码))。

由于 PhpStorm v11(即将发布)您可以直接从那里启动调试(专用 "Debug" 按钮)而不是添加 xdebug cookie/query 参数.

另一种选择是使用类似的基于浏览器的工具(例如 Chrome 的 Postman)。