web-dev-qa-db-ja.com

502 Bad Gateway PHPストームですが、インタープリタと実行ファイルが設定されています

  • OS:Windows 7-64ビット
  • PHP:スタンドアロンのphp.exe(PHP ver 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に設定します

enter image description here

まだ502エラーが発生するのはなぜですか。

私はそれを複数回実行しましたが、1回実行しました(前後のインスタンスからの変更はありませんでした)が、非常に奇妙でしたが、1回のページの読み込みでのみ発生し、再現性はありませんでした。

編集:比較する別のプロジェクトを開いたときに、1つの違いを実現しました。一度動作したときは、右クリックのコンテキストメニューが異なって見えました。他のプロジェクトはうまくデバッグしています。何が違いますか?何ができますか?どちらのプロジェクトも同じインタープリターを使用しています。

...また、作業中のプロジェクトに戻ると、追加のコンテキストメニュー項目が消えていることもわかりました。

enter image description here

編集2:まだ問題のハンティング...certainファイルがPHPStormを起動すると正しく実行され、そのコンテキストメニューが表示されることがわかりました。ただし、他のファイルは、PHPStormの起動時にはありません。追加のメニューなしでファイルをデバッグしようとすると、サーバーは502を表示し、「適切な」ファイルには追加のメニューがありません。最初に追加のコンテキストメニューがあるものから始めれば、実行されますが、そうでない場合は、最初のファイルが機能しなくなります。私は「進歩」しているように感じますが、特にこれらのたびに異なるファイルを実行しようとするため、さらに混乱します。「[x]は単一インスタンスの実行構成です。走っているのを止めたいの?」その時点で「停止して再実行」をクリックします。 502を与えるものは、停止して再実行した場合、「適切な」ファイルに引き継がれることはないと思いますが、そうではないようです。

編集3:おそらくインタープリターのセットアップが悪いかもしれないので不思議に思ったので、私はsecurewamp( http://securewamp.org/en/ )を入手し、移植可能なバージョンを取得し、セットアップを使用し、xdebugを追加したデフォルトのセットアップを使用しました(このバージョン:php_xdebug-2.4.0rc1-5.4-vc9.dll)とまったく同じ問題。

チェックすべき追加事項が途絶えています。

編集4:PHPStormの何かであることを確認してください。これまで機能していなかったphpファイルの1つで、php.exeで直接開いたところ、問題なく動作しました。私が欠落しているのはphpstormの設定か、機能が壊れているためです。

編集5:潜在的な原因をたどって、[実行]> [デバッガの検証]ツールを試しました。パスとURLをデフォルトのままにし(変更する理由はありません)、「検証スクリプトへのWebパスが正しく構成されていることを確認してください」の結果を検証し、ディレクトリを一覧表示します。

編集6:検証は、SecureWAMPが実行されていた127.0.0.1でのみ行われていました。サーバーをオフにすると、「検証スクリプトの実行に失敗しました: '接続が拒否されました:接続します'。

編集7:LazyOneが指摘したように、最初の画像のファイルは2つの異なるファイルタイプ(phpとhtml)です。私は両側で.phpファイルを使用してそれを実行しました。スクリーンショットのために現在作業している2つのファイルを取得しました。これは、phpの例です。 enter image description here

編集8:いつ機能するか、機能しない場合にようやく確実なパターンが得られると思います。コンテキストメニューは赤のニシンでした。サブメニューのないものは、条件が満たされた場合に問題なく機能します。

  • A.機能するファイル(これまでのところ、ワーキングファイルと非ワーキングファイルのパターンに気づいていないため、実際には1つのワーキングファイルと1つの非ワーキングファイルはまったく同じコードです)を選択する必要があります。

  • B.いかなる状況下でも、ファイルを「停止して再実行」することはできません。これにより、ファイルが不正なゲートウェイにヒットする原因となります。

  • C.機能していないファイルを開くことはできません。実行すると、現在のサーバーがハングし、別のファイルで「停止して再実行」が実行されるまでハングし続けます。その後、開いているすべてのファイルで不正なゲートウェイエラーが発生します。機能していないファイルを開くと、現在機能しているファイルで不正なゲートウェイエラーが発生します。

  • D. CまたはDがシステムの再起動を要求した後に、作業ファイルを再び機能させるには。

編集9:検証デバッガー構成ツールをいじくり回して、最終的に別の答えを出しました(ばかげた感じ、実際、検証スクリプトのURLにターゲットディレクトリを含める必要がありましたが、サイトはそのディレクトリから直接ホストしていました。まあ、とにかく、それが私の問題の原因であるかどうかはわかりませんが、調査します enter image description here

編集10:上記のエラーに対処するためにphp.iniに追加しています... xdebug.remote_enable = 1

編集11:追加された行から見られる実際の利点はありません。

編集12:投稿リクエストのブラウザのスクリーンショット enter image description here

編集13:EAP(10.0.2)バージョンのphpStormへのアップデート。これまでのところ同じ結果が表示されますが、少なくともコンソールには、Webページだけでなくエラーも表示されています。また、SecureWAMPのApacheサーバーを完全に実行して、デフォルトのhtdocsディレクトリから変更できないようにするための何かがあることを確認しました。

enter image description here

12
liljoshu

FWIW、これはタイムアウトの問題と同じくらい簡単かもしれないと思います。

私の環境は、OPs、Win764、PhpStorm 10.0.4、PHP 5.5.27。

F3自動テストをいくつか行っていますが、コードの右上に浮かぶツールバーの小さなアイコンの1つを使用して「ブラウザーで」テストコードを実行すると、502 Bad Gatewayエラーが頻繁に表示されます。 (下の画像を参照してください。)

一部のテストページでは、エラーは初回のみのようです。 1回実行し、失敗し、再度実行し、問題なく動作します。他のものはそれらが働く前に2つか3つの実行を必要とするようです。しかし、私はブラウザで動作するのを見たことがないいくつかを持っています。

OTOH、これらのページのコードウィンドウを右クリックしてデバッグすると、コードを最後まで実行しても、1行ずつ実行しても、コードは正常に実行されます。

明らかに、私のツールのセットアップは間違っていません。一部のテストは、毎回ブラウザーから実行できます。

私が考えているのは、失敗する可能性の高いテストがかなり重いdbクエリを実行するということです。そして、私のphpインタープリターは、ブラウザーで要求を実行すると、要求を積極的にタイムアウトにしています。

ただし、ページが実行されてタイムアウトになるたびに、1つ以上のクエリがキャッシュされ、次に実行するときにページが高速になります。最終的に、まったく実行されるものについては、十分な数のデータベース作業がキャッシュされるため、ページはネットワークの下に入り、制限時間内に終了することができます。

それが私の理論です。私が見つけていないのは、インタープリターのタイムアウト間隔をどこでどのように変更するかです。つまり、PhpStormから実行した場合のタイムアウト間隔です。私はすでに持っています

max_execution_time = 300

私のphp.iniファイルで、phpinfo()を使用すると設定されていることがわかります。しかし、インタープリターがPhpStormから実行されると、オーバーライドされると私は信じる必要があります。

更新-可能性のある修正:php.iniファイルにそのmax_execution_time設定があるにもかかわらず、 このPhpStormサポートページで説明されているように、phpインタープリターの設定を確認してみました 、ステップ1および2。max_execution_timeは0でした。そのため、そのページのUIを使用して、php.iniにある300と同じ設定を追加しました。 (それから私はPhpStormを閉じて再び開きました-古いプログラマーの大きなパラノイアです。)これまでのところ、「最悪の」ページに1つの不正なゲートウェイメッセージが表示されましたが、2回目も実行されました。他はすべて完了するまで実行されているようです。私はいくつかの注意深い待機を行い、この「修正」が長期的に役立つかどうかを確認します。

(そして、誰もがそれを指摘せざるを得なくなる前に:はい、クエリをキャッシュすることは自動テストにとってひどい考えです。修正する必要があります-しかし、インタープリターのタイムアウトを延長してキャッシュなしでテストを成功させる方法を理解した後でのみです。)

enter image description here

2
Anne Gunn

これは質問に直接答えるものではありませんが、502 Bad Gatewayエラーに出くわした人には役立つかもしれません。

502 Bad Gatewayエラーを取得する別の方法は、phpスクリプトが大量のエラー/警告/通知を発行する場合です。 502 Bad Gatewayエラーにつながる初期化されていない変数が原因で、何千もの通知を生成するスクリプトがありました。

1つの解決策は、これらの通知を生成するphpコードを修正するか、php.ini& ~E_NOTICE設定に追加してerror_reportingファイルの通知レポートを無効にすることです。

例えば

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