502 Bad Gateway PHP Storm 但已设置解释器和可执行文件

502 Bad Gateway PHP Storm but Interpreter and executable are set

我看到的关于克服 PhpStorm 中的 502 网关错误的所有建议都涉及确保您拥有解释器和可执行文件集。我正在使用独立的 php.exe (http://windows.php.net/download#php-5.5 VC11 x86 线程安全 (2015-Oct-01 01:25:56)) 并将所有内容设置为 PHP 5.5

老实说,我很困惑为什么我仍然收到 502 错误。

我已经 运行 多次,而且它 运行 一次(之前或之后的实例没有变化)我觉得非常奇怪,但只针对一页加载和这不是可重复的事件。

编辑:当我打开另一个项目进行比较时,我发现了一个不同之处。有一次它确实起作用了,右键单击上下文菜单看起来不一样了。另一个项目调试得很好。有什么区别?是什么赋予了?这两个项目都使用相同的解释器。

...还发现回到工作项目,附加的上下文菜单项消失了。

编辑 2:仍在寻找问题...发现 某些 文件会在我启动 PHPStorm 时 运行 并且会有那个上下文菜单.但是,其他文件不会在 PHPStorm 启动时出现。如果我尝试在没有附加菜单的情况下调试文件,服务器将给出 502,然后 "good" 文件将没有附加菜单。如果我先从一个有额外上下文菜单的文件开始,它将 运行,但如果我跟着一个没有,第一个文件将停止工作。我觉得我正在制作 "progress" 但我也越来越困惑,特别是因为每次我尝试 运行 一个不同的文件时,它会问我“[x] 是一个单一实例运行 配置。您确定要停止 运行ning 吗?此时我单击 "Stop and Rerun"。我认为如果事情停止并重新 运行...,那些给出 502 的人不会将任何东西转移到 "good" 文件中......但事实并非如此。

编辑 3: 想知道我的解释器设置是否可能不好,所以我抓住了 securewamp ( http://securewamp.org/en/ ),得到了便携版本,设置,使用默认设置并添加了 xdebug (这个版本: php_xdebug-2.4.0rc1-5.4 -vc9.dll) 和完全相同的问题。

我什至不知道要检查的其他内容。

编辑 4:非常确定它现在在 PHPStorm 中。我用 php.exe 直接打开了 php 文件之一,但它运行良好。它必须是 phpstorm 中我丢失的某些设置,或者某些损坏的功能。

编辑 5:追踪潜在原因后,尝试了 运行 > 验证调试器工具。路径和 URL 保留为默认值(没有理由更改它们),并尝试在 "Please check that web path to validation script is correctly configured" 中查看结果并列出我的目录。

编辑 6:验证仅在 127.0.0.1 上进行,因为这是 SecureWAMP 运行正在使用的。关闭其服务器会导致“无法执行验证脚本:'Connection refused: connect'。

编辑 7:正如 LazyOne 所指出的,我在第一张图片中的文件是两种不同的文件类型(php 和 html)。我已经在两边都使用了 .php 文件,我只是抓取了我当前正在使用的两个文件作为屏幕截图。这是 php 之一的示例。

编辑 8:我想我终于找到了一个可靠的模式来判断它何时有效,何时无效。 上下文菜单是一条红鲱鱼。没有子菜单的那些在满足条件时也可以正常工作。

编辑9: 正在摆弄验证调试器配置工具,最后得到它给我一个不同的答案(感觉很傻,实际上,只需要将 url 中的目标目录包含到验证脚本中,即使我认为该网站直接从该目录托管。哦,好吧。无论如何,有一个错误,不确定它是否是我的问题的原因,但会研究它。

编辑 10: 添加到 php.ini 以解决上述错误... xdebug.remote_enable=1

编辑 11:从添加的行中看不到真正的好处。

编辑 12:发布请求的浏览器屏幕截图

编辑 13:更新到 phpStorm 的 EAP (10.0.2) 版本。到目前为止,结果看起来是一样的,尽管现在至少控制台也向我显示了错误,而不仅仅是网页。还尝试 运行 完全通过 SecureWAMP 的 apache 服务器进行测试,结果发现有些东西阻止我更改默认的 htdocs 目录。

FWIW,我认为这可能和超时问题一样简单。

我的环境和OPs很像,Win764,PhpStorm 10.0.4,PHP 5.5.27.

我有一些 F3 自动测试,当我 运行 测试代码 'in the browser' 使用工具栏中浮动到右上角的小图标之一时,我经常看到 502 Bad Gateway 错误我的代码。 (见下图。)

对于我的一些测试页面,错误似乎只是第一次出现。 运行 一次,失败,再次 运行,工作正常。其他人似乎需要 2 或 3 运行s 才能工作。但是我有几个我从未见过在浏览器中工作。

OTOH,如果我在代码 window 中右键单击这些页面中的任何一个并进行调试,代码 运行 就可以了,无论我是否一直让它 运行或者一行一行地走。

很明显,我的工具设置没有错。有些测试每次都可以从浏览器进行 运行。

我认为正在发生的事情是可能失败的测试执行相当繁重的数据库查询。当我在浏览器中 运行 我的请求时,我的 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 是 0。因此,我使用该页面上的 UI 添加了一个设置,与我 [=] 中的 300 相同44=]。 (然后我关闭并重新打开 PhpStorm —— 一个老程序员 pa运行oia 的大佬。)到目前为止,我在我的 'worst' 页面上看到了一条错误的网关消息,但即使它 运行第二次。其他好像都运行完成了。我会仔细等待,看看这个 'fix' 对我有什么长期好处。

(并且,在任何人被迫指出之前:是的,缓存查询对于自动化测试来说是一个糟糕的主意。必须解决这个问题——但只有在我弄清楚如何延长解释器超时以便我的测试可以无需缓存即可成功。)

这不会直接回答问题,但可能对遇到 502 Bad Gateway 错误的人有用。

另一种导致 502 Bad Gateway 错误的方法是当 php 脚本发出过多 errors/warnings/notices 时。我有一个脚本生成了数千条通知,因为未初始化的变量会导致 502 Bad Gateway 错误。

一种解决方案是修复生成这些通知的 php 代码,或者通过将 & ~E_NOTICE 添加到 error_reporting 设置来禁用 php.ini 文件中的通知报告。

例如

error_reporting=E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE