我使用PhpStorm,xdebug和nginx + php-fpm进行远程调试。当我在请求XDEBUG_SESSION_START=my_ide_key
参数中传递GET
时,Nginx会回复502错误代码(错误网关)。同时我在IDE中的代码断点工作正常。当我没有通过XDEBUG_SESSION_START
参数nginx响应格式良好的HTML和代码200.但没有这个参数显然没有调试。
在nginx错误日志中,我看到有关从上游收到的大标头的通知。我尝试在php-fpm和nginx之间转储通信,只有一个不同的东西是一个Set-Cookie
标题:
Set-Cookie: XDEBUG_SESSION=666; expires=Mon, 16-Sep-2013 16:07:28 GMT; path=/
我尝试查找此标题何时出现在响应中。我发现在我的智能插件Smarty_Internal_Template
析构函数(在我的启动脚本的最后一行代码行之后)中,如果我调用headers_list()
,我会看到成长量的Set-Cookie标头(等于析构函数调用和Set- Cookie标头数量)。我确信我的代码中没有明确的header('Set-Cookie: XDEBUG_SESSION=...')
调用。我尝试升级和降级xdebug版本但仍然具有相同的行为。将代码remove_header('Set-Cookie')
放在Smarty_Internal_Template
处解决了我的问题,但那是丑陋的黑客攻击!
关于这种奇怪情况的任何想法?
答案 0 :(得分:1)
我建议在这种情况下不要使用XDEBUG_SESSION_START。对我来说,看起来XDEBUG_SESSION_START正在触发服务器端的一些代码执行来设置cookie。而这正在干扰聪明的模板代码。
在我使用PHPStorm的所有经验中,我发现打开xdebug的最佳方法是通过bookmarklet,你可以在这里生成:
https://www.jetbrains.com/phpstorm/marklets/
bookmarklet在浏览器中设置cookie。因此,服务器中不会执行任何代码来设置XDEBUG_SESSION和路径变量,这可能会减少或消除对智能代码的干扰。
此外,PHPStorm的一个提示是确保PHPStorm启动并运行,并且PHPStorm和php-fpm之间的网络连接正常工作(我认为这是与nginx结合使用的)。
如果php-fpm无法连接到PHPStorm,根据我的经验,代码最终会在服务器上执行,但速度会非常慢。
有几次我错误地将其视为性能问题并浪费了大量时间。