我在PhpStorm中通过502网关错误时看到的所有建议都涉及确保您已获得解释器和可执行文件集。我使用独立的php.exe(http://windows.php.net/download#php-5.5 VC11 x86 Thread Safe(2015-Oct-01 01:25:56))并将所有内容设置为PHP 5.5
我真的很困惑,为什么我仍然会收到502错误。
我已多次运行它,它确实运行了一次(之前或之后的实例没有任何变化),我发现它非常奇怪,但仅限于一页加载而且不是可重复的事件。 / p>
编辑:当我打开另一个要比较的项目时,实现了一个区别。有一次它确实有效,右键单击上下文菜单看起来不同。另一个项目调试很好。有什么区别?是什么赋予了?两个项目都使用相同的解释器。
...还发现回到工作项目后,附加的上下文菜单项消失了。
编辑2:仍在寻找问题...发现某些文件将在我启动PHPStorm时正常运行并具有该上下文菜单。但是,其他文件在PHPStorm启动时不会出现。如果我尝试在没有addtional菜单的情况下调试文件,服务器将给出502然后" good"文件不会有额外的菜单。如果我从一个首先具有额外上下文菜单的那个开始,它将运行,但如果我跟着一个没有,则第一个文件停止工作。我觉得自己正在进步"进步"但是我也变得更加困惑,特别是因为每次我尝试运行不同的文件,它都会问我" [x]是单实例运行配置。你确定要停止正在运行吗?"在这一点上,我点击"停止并重新运行"。我认为那些给予502的人不会有任何东西带到"好"如果事情被停止并重新运行,那么这些文件......但似乎并非如此。
编辑3: 想知道我的解释器设置是否可能不好,所以我抓住了securewamp(http://securewamp.org/en/),得到了便携版本,设置,使用了xdebug添加的默认设置(此版本:php_xdebug-2.4.0rc1-5.4-vc9。 dll)和完全相同的问题。
我甚至无法检查其他内容。
编辑4:现在确定它是PHPStorm中的一些东西。其中一个没有工作的php文件,我直接用php.exe打开,它工作正常。它必须是phpstorm中的一些设置,我错过了,或者某些功能被破坏了。
编辑5:跟踪潜在原因,尝试运行>验证调试器工具。路径和URL保留为默认值(没有理由更改它们),并尝试将结果放在"请检查验证脚本的Web路径是否已正确配置"并列出我的目录。
编辑6:验证仅在127.0.0.1上获取,因为这是SecureWAMP运行的原因。关闭其服务器导致"无法执行验证脚本:'连接被拒绝:连接'。
编辑7:正如LazyOne所指出的那样,我在第一张图片中的文件是两种不同的文件类型(php和html)。我已经用双面的.php文件完成了它,我刚刚抓住了我目前正在为截图工作的两个文件。这是一个php的例子。
编辑8:我认为我终于得到了一个可行的模式,当它工作时和它没有。 上下文菜单是一个红色的鲱鱼。如果满足条件,没有子菜单的那些工作就会很好。
一个。必须选择一个有效的文件(到目前为止还没有注意到工作文件与非工作模式,实际上,一个工作文件和一个非工作文件具有完全相同的代码)。
B中。在任何条件下都不能"停止并重新运行"这样一个文件会导致文件在之后命中错误的网关。
℃。您无法打开非工作文件。如果你这样做,当前服务器挂起并将继续挂起,直到"停止并重新运行"在另一个文件上运行,之后所有打开的文件都会出现错误的网关错误。打开非工作文件将导致当前正在运行的文件出现错误的网关错误。
d。要在C或D需要重新启动系统后再次使用工作文件。
编辑9: 正在摆弄验证调试器配置工具,最后让它给我一个不同的答案(对它感到愚蠢,实际上,只需将目标目录包含在验证脚本的URL中,即使我认为该网站正在托管直接从那个目录。好吧。无论如何,有一个错误,不确定它是否是我的问题的原因,但会研究它。
编辑10: 添加到php.ini以解决上述错误... xdebug.remote_enable = 1
编辑11:从添加的行中看不到真正的好处。
编辑13:更新到phpStorm的EAP(10.0.2)版本。到目前为止它看起来是相同的结果,虽然现在至少控制台也显示错误而不仅仅是网页。还尝试通过SecureWAMP的apache服务器完全运行,但发现阻止我从默认的htdocs目录转移的东西。
答案 0 :(得分:2)
FWIW,我认为这可能就像超时问题一样简单。
我的环境非常类似于OP,Win764,PhpStorm 10.0.4,PHP 5.5.27。
我有一些F3自动化测试,当我在浏览器中运行测试代码时,我经常看到502 Bad Gateway错误,使用工具栏中的一个小图标浮动到我的代码的右上角。 (见下图。)
对于我的一些测试页面,错误似乎只是第一次。运行一次,失败,再次运行,工作正常。其他人似乎需要2到3次才能运作。但我有一些我从未见过在浏览器中工作的人。
OTOH,如果我在代码窗口右键单击任何这些页面并进行调试,代码运行正常,无论我是让它一直运行还是逐行遍历。
显然,我的工具设置没有错。每次都可以从浏览器运行一些测试。
我认为正在发生的是可能失败的测试执行相当繁重的数据库查询。当我在浏览器中运行它时,我的php解释器正在积极地超时我的请求。
但是,每次页面运行并超时时,其一个或多个查询都会被缓存,下次运行时,页面会更快。最终,对于那些将运行的数据库,将缓存足够的数据库工作,以便页面可以在线路下进入并在时间限制之前完成。
这就是我的理论。我没有找到的是在何处以及如何更改解释器超时间隔。也就是说,从PhpStorm运行时的超时间隔。我已经有了
max_execution_time = 300
在我的php.ini文件中,当我使用phpinfo()时可以看到它已设置。但我必须相信,当从PhpStorm运行解释器时它会被覆盖。
更新 - 可能的修复:所以即使我的php.ini文件具有max_execution_time设置,我也试着查看我的php解释器设置,如this PhpStorm support page,步骤1和2所述。我的max_execution_time因此,我使用该页面上的UI添加了一个设置,与我在php.ini中的相同。 (然后我关闭并重新打开了PhpStorm--一个老程序员的偏执狂。)到目前为止,我在“最糟糕的”页面上看到了一个糟糕的网关消息,但即便是第二次运行。其他人似乎都跑完了。我会做一些警惕的等待,看看这个'修复'是否对我有好处。
(并且,在任何人感到有必要指出它之前:是的,缓存查询对于自动化测试来说是一个糟糕的想法。必须解决这个问题 - 但只有在我弄清楚如何扩展解释器超时以便我的测试才能成功缓存。)
答案 1 :(得分:0)
这不能直接回答问题,但是对于绊倒502 Bad Gateway错误的人可能有用。
获得 502错误网关错误的另一种方法是,当php脚本发出过多的错误/警告/通知时。我有一个脚本,由于未初始化的变量会产生 502 Bad Gateway 错误。
一种解决方案是修复生成这些通知的php代码,或者通过在php.ini
设置中添加& ~E_NOTICE
来禁用error_reporting
文件中的通知报告。
例如
error_reporting=E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE