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