502错误网关 PHPStorm但解释器和可执行文件已设置

13
  • 操作系统:Windows 7 - 64位
  • PHP:独立的php.exe(PHP版本5.5)
  • PHPStorm版本:10.0.1

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

enter image description here

我很困惑为什么我仍然收到502错误。
我运行了多次,它只运行了一次(之前和之后的实例都没有更改),这让我感到非常奇怪,但只有一次页面加载,并且不能重复发生。
编辑:当我打开另一个项目进行比较时,意识到一个不同之处。唯一一次它正常工作时,右键单击上下文菜单看起来不同。其他项目正在进行调试。是什么造成了差异?两个项目都使用相同的解释器。
此外,发现回到工作项目时,附加的上下文菜单项消失了。

enter image description here

编辑2:仍在寻找问题......发现只有某些文件在我启动PHPStorm并具有上下文菜单时才能正常运行。然而,其他文件在PHPStorm启动时则不行。如果我尝试在没有附加菜单的情况下调试文件,则服务器将返回502错误,然后“好”的文件将不再有额外的菜单。如果我首先使用具有额外上下文菜单的文件开始,它将正常运行,尽管如果我跟随一个没有额外菜单的文件,则第一个文件将停止工作。我觉得我正在取得“进展”,但我也变得更加困惑,特别是因为每次我尝试运行不同的文件时,它都会问我“[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:我认为我最终找到了它何时起作用,何时不起作用的可靠模式。 上下文菜单不是问题。没有子菜单的情况在满足条件时可以正常工作。

  • A. 必须选择一个有效的文件(目前还没有发现有效文件和无效文件的模式,事实上,一个有效文件和一个无效文件具有完全相同的代码)。

  • B. 任何情况下都不能“停止并重新运行”文件,否则文件将在之后遇到错误网关。

  • C. 不能打开一个无效的文件。如果这样做,当前服务器会挂起,并将继续挂起,直到在不同的文件上运行“停止并重新运行”为止,此后所有打开的文件都将出现错误网关。打开一个无效文件会导致当前正在工作的文件出现错误网关。

  • D. 在 C 或 D 后使有效文件再次工作需要重新启动系统。

编辑9: 我在调试配置工具中摸索,最终得到了不同的答案(感觉有点傻,实际上只需要将目标目录包含在验证脚本的url中即可,尽管我认为该站点是直接从该目录托管的。不过没关系。无论如何,我有一个错误,不确定它是否是我的问题原因,但会进行研究。 输入图像描述

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

编辑11:没有看到添加行带来的真正好处。

编辑12:发布所请求的浏览器截图 输入图像描述

编辑13:更新phpStorm的EAP(10.0.2)版本。目前看起来结果相同,不过现在至少控制台也向我显示错误,而不仅仅是网页。还尝试通过SecureWAMP的Apache服务器运行,只发现有些东西阻止我从默认的htdocs目录更改。

enter image description here


1
请发布一个屏幕截图,其中浏览器中的URL可见。 - LazyOne
1
还发现回到工作项目时,附加的上下文菜单项消失了。左侧是PHP文件,右侧是HTML。为什么您希望在HTML文件中看到PHP命令? - LazyOne
1
  1. 我很高兴你注意到了我的第二条评论……但是第一条评论呢?太难做了吗?
  2. 无论如何:根据你的最后一个截图,你根本没有使用你的WAMP Web服务器(Apache)--你正在使用PhpStorm自己简单内置的Web服务器--看看URL(还记得我的评论#1吗?)--localhost:63342/PROJECT_NAME/。所以……使用你的WAMP而不是内置的Web服务器。
- LazyOne
我实际上忘记发布图片了,很抱歉。(我开始尝试发布,但它开始挂起,然后我想知道为什么会挂起,完全分心,然后立即忘记了。)至于让WAMP工作,我会尝试调整一下看看能否解决(apache不是我LAMP堆栈的强项),但如果PHPstorm的内置Web服务器可以正常工作,我并不反对使用它。 - lilHar
1
请尝试使用10.0.2 EAP版本 - http://blog.jetbrains.com/phpstorm/2015/12/phpstorm-10-0-2-eap-143-1212/。 "502"问题很可能是由于某些不兼容的设置引起的。虽然在某些情况下,实际内置Web服务器(至少https://youtrack.jetbrains.com/issue/WEB-17803票说它修复了一些问题)。 https://youtrack.jetbrains.com/issue/WEB-17317仍然未解决。很难说......但无论如何,Apache都会是更好的选择(请记住:除非手动配置,否则内置服务器对URL有一些限制)。 - LazyOne
显示剩余6条评论
2个回答

2

就我个人而言,我认为这可能只是一个超时问题。

我的环境与OPs非常相似,Win764,PhpStorm 10.0.4,PHP 5.5.27。

我有一些F3自动化测试,在使用工具栏上浮动的小图标之一“在浏览器中”运行测试代码时,经常会看到502 Bad Gateway错误。(见下面的图像。)

对于我的一些测试页面,错误似乎只出现一次。运行一次失败,再运行一次,就可以正常工作了。另一些则需要运行2次或3次才能正常工作。但是有几个页面,我从来没有在浏览器中看到过它们正常工作。

另一方面,如果我在代码窗口中右键单击任何这些页面,并进行调试,无论是让它全部运行还是逐行运行,代码都可以正常运行。

显然,我的工具设置没有问题。有些测试可以并且每次都能从浏览器中运行。

我认为发生的情况是,可能失败的测试执行了相当沉重的数据库查询。当我在浏览器中运行它们时,我的php解释器会积极地超时请求。

但是,每次页面运行并超时时,其中一个或多个查询会被缓存,下一次运行它时,页面会更快。最终,对于任何可以运行的页面,足够多的数据库工作被缓存,以便在时间限制之前完成。

所以这是我的理论。我还没有找到在哪里以及如何更改解释器超时间隔。也就是说,在从PhpStorm运行时的超时间隔。我已经有了

max_execution_time = 300

在我的php.ini文件中,我可以看到已经设置了max_execution_time参数,当我使用phpinfo()函数时也能看到。但是我相信当从PhpStorm运行解释器时,它被覆盖了。

更新--可能的解决方法:尽管我的php.ini文件有max_execution_time参数设置,但我按照这个PhpStorm支持页面的步骤1和2查看了我的php解释器设置,发现我的max_execution_time为0。所以,我使用该页面上的UI添加了一个设置,将其设置为与我的php.ini中一样的300。(然后我关闭并重新打开了PhpStorm--典型的旧程序员偏执症。)到目前为止,我在最差的页面中看到了一个bad gateway消息,但是即使第二次运行它也已经可以执行完毕。其他所有页面似乎都成功运行至完成。我会继续留意并看看这个“修复”是否对我有长期的好处。

(在任何人指出之前: 是的,对于自动化测试来说缓存查询结果是一个可怕的想法。必须解决这个问题--但只有在我弄清楚如何延长解释器超时时间以使我的测试不需要缓存时才能解决。)

enter image description here


0

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

另一种导致502 Bad Gateway错误的方法是当php脚本发出太多错误/警告/通知时。我有一个脚本由于未初始化变量而生成了数千个通知,导致502 Bad Gateway错误。

解决方案之一是修复生成那些通知的php代码,或者通过在php.ini文件中添加& ~E_NOTICEerror_reporting设置来禁用通知报告。

例如:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接