如何让 REST 客户端(例如内置于PHPStorm或POSTman的客户端)与 XDebug 一起使用?
在我当前的 XDebug 设置中,使用 PHPStorm 和提供的 Bookmarklet我能够让它在 Chrome 和 Firefox 中运行 - 但是一旦我尝试使用 POSTman 或任何其他 REST 客户端,我无法弄清楚如何开始。
干杯。
您可以使用以下方法之一:
配置您的 Xdebug(通过编辑 php.ini)尝试调试每个php 脚本。关键选项:
xdebug.remote_autostart = 1
xdebug.start_with_request = yes
将 Xdebug 会话启动参数添加到实际 URL ( XDEBUG_SESSION_START={{KEY}}
-- http://xdebug.org/docs/remote ),例如:?XDEBUG_SESSION_START=PHPSTORM
将 Xdebug cookie 作为标题之一传递(例如,由小书签或浏览器扩展设置的标题)。
为此:确保在 PhpStorm ( Run | Start Listen for PHP Debug Connection
) 中预先激活“电话手柄”图标。
PS如果您使用的是Postman、Insominia或类似的(另一个 REST 客户端),那么 IMO 最好/最透明的方式是使用 Xdebug cookie。您很可能已经在使用单独的环境(例如“dev”、“test”、“production”),因此您只能在需要的地方使用此类 cookie(当然取决于使用的工具和版本)。
这样就无需编辑 URL(即使您将它作为“条件参数”:在某些环境中存在而在另一个环境中不存在)或将 Xdebug 配置为“调试所有请求”。
来自我的 Postman 的此类 Xdebug cookie 的示例(根据需要对其进行编辑;此处为本地some-domain.local.test
假域设置):
XDEBUG_SESSION=value; Path=/; Domain=.some-domain.local.test; Expires=Tue, 19 Jan 2038 03:14:07 GMT;
由于主机 URL 应该是您的环境的一部分(例如,端点 URL 将类似于{{host}}/api/v1/welcome
),因此此类 cookie 将仅发送到开发域而不是生产域。
只需?XDEBUG_SESSION_START=filter_string
在网址末尾添加,例如:
https://new-supplier.local/api/login?XDEBUG_SESSION_START=PHPSTORM
PHPSTORM 是我的默认过滤器字符串,你可以使用任何你想要的。您的编辑器应该设置为通过 IDE 键(过滤器字符串)过滤连接,仅此而已。您应该能够以与 Chrome 或 FF 相同的方式进行调试。
警告!
xdebug >= 3.0 更改了 php.ini 中的参数。升级xdebug后,这里的大部分答案都不相关了。
参考: https ://xdebug.org/docs/upgrade_guide
基本上,您需要在 php.ini 中添加类似这样的内容:
xdebug.mode=develop,gcstats,coverage,profile,debug
xdebug.start_with_request=1
xdebug.idekey=PHPSTORM
这让我发疯了。我刚刚更新到 PHP 7.1 并且工作的 xdebug 不再工作。我更新了xdebug.so
文件 (Linux) 并php --version
指出 xdebug 确实正在加载并且正在工作。但是当我使用 Postman 时,调试器从未启动。
这是解决方案。如果您使用 Apache 作为您的服务器,那么您需要启用 PHP 7.1 模块并重新启动 Apache:sudo service apache2 restart
xdebug.remote_timeout = 60000
为我工作。由于我的 Mac 非常慢,并且远程调试器在 200 毫秒后超时(默认值)
最终让我的 Postman/PHPStorm Xdebug 工作的是在 PHPStorm 中添加PHP 远程调试配置:
运行 -> 编辑配置 -> + -> PHP 远程调试
我只是将名称设置为localhost并保存 - 没有IDE Key等。