【问题标题】:502 Bad Gateway PHP Storm but Interpreter and executable are set502 Bad Gateway PHP Storm 但解释器和可执行文件已设置
【发布时间】:2016-03-05 20:03:43
【问题描述】:
  • 操作系统: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 Thread Safe (2015-Oct-01 01:25:56)) 并将所有内容设置为 PHP 5.5

我真的很困惑为什么我仍然收到 502 错误。

我已经运行了多次,但它确实运行了一次(之前或之后的实例没有任何变化),我觉得这非常奇怪,但仅用于一页加载,并且不会重复发生。

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

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

编辑 2:仍然有问题寻找...发现当我启动 PHPStorm 时 certain 文件将正常运行,并且将具有该上下文菜单。但是,其他文件不会在 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 保留为默认值(没有理由更改它们),并尝试 vlaidate 结果“请检查验证脚本的 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 目录。

【问题讨论】:

  • 请发布错误的屏幕截图,并在浏览器中显示 URL。
  • “还发现回到工作项目时,附加的上下文菜单项消失了。” 左侧是 PHP 文件 ..,右侧是 HTML。为什么您希望在 HTML 文件中看到 PHP 命令?
  • @LazyOne 这只是我当时正在处理的文件之一,但它也发生在 php 文件中,而不仅仅是 html。我想我应该更新一下,这样就清楚了。谢谢。
  • 1) 很高兴您注意到我的第二条评论……但是评论 #1 呢?做起来难吗? 2) 在任何情况下:根据您的上一个屏幕截图——您根本没有使用 WAMP 网络服务器 (Apache)——您使用的是 PhpStorm 自己的简单内置-在网络服务器中——查看 URL(还记得我的评论 #1 吗?)——localhost:63342/PROJECT_NAME/。所以......使用你的 WAMP 而不是内置的网络服务器。
  • 请尝试 10.0.2 EAP 构建 -- blog.jetbrains.com/phpstorm/2015/12/… 。 “502”的问题很可能是由于一些不兼容的设置。尽管在某些情况下它是实际的内置 Web 服务器(至少 youtrack.jetbrains.com/issue/WEB-17803 票说它修复了一些问题)。 youtrack.jetbrains.com/issue/WEB-17317 仍然开放。很难说......但无论如何 Apache 将是一个更好的选择(请记住:内置服务器对 URL 有一些限制,除非手动配置)。

标签: php phpstorm development-environment windows-7-x64


【解决方案1】:

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

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

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

例如

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

【讨论】:

    【解决方案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 为 0 . 因此,我使用该页面上的 UI 为其添加了一个设置,与我在 php.ini 中的 300 相同。 (然后我关闭并重新打开了 PhpStorm——一个老程序员的偏执狂。)到目前为止,我在我的“最差”页面上看到了一个糟糕的网关消息,但即使它第二次运行。其他人似乎都在完成。我会做一些观察等待,看看这个“修复”是否对我有长期的好处。

    (而且,在任何人不得不指出之前:是的,缓存查询对于自动化测试来说是一个糟糕的主意。必须解决这个问题——但只有在我弄清楚如何延长解释器超时之后,我的测试才能在没有的情况下成功缓存。)

    【讨论】:

      猜你喜欢
      • 2017-08-20
      • 2014-06-28
      • 1970-01-01
      • 2016-01-04
      • 2014-07-08
      • 1970-01-01
      • 2017-11-17
      • 2016-04-20
      • 1970-01-01
      相关资源
      最近更新 更多