wake-up-neo.com

502 Bad Gateway PHP Sturm, aber Interpreter und ausführbare Datei sind gesetzt

  • Betriebssystem: Windows 7 - 64 Bit 
  • PHP: Standalone php.exe (PHP Version 5.5) 
  • PHPStorm Version: 10.0.1

Bei allen Ratschlägen zum Beheben des 502 Gateway-Fehlers in PhpStorm muss nur sichergestellt werden, dass Sie über Ihren Interpreter- und ausführbaren Satz verfügen. Ich benutze die Standalone-Datei php.exe ( http://windows.php.net/download#php-5.5 VC11 x86 Thread Safe (2015-Oct-01 01:25:56)) und habe alles eingestellt zu PHP 5.5

 enter image description here

Ich bin ehrlich gesagt verwirrt, warum ich immer noch 502 Fehler bekomme.

Ich habe es mehrmals ausgeführt, und es wurde einmal ausgeführt (es gab keine Änderungen vor oder nach den Instanzen), was ich zutiefst merkwürdig fand, aber nur für das Laden einer Seite und es war kein wiederholbares Vorkommen.

Bearbeiten: Ein Unterschied wurde erkannt, als ich ein anderes Projekt zum Vergleich aufbaute. Sobald es funktioniert hat, sah das Kontextmenü mit der rechten Maustaste anders aus. Das andere Projekt ist in Ordnung. Was macht den Unterschied aus? Was gibt? Beide Projekte verwenden den gleichen Interpreter. 

... Außerdem stellte sich heraus, dass der zusätzliche Kontextmenüpunkt, der zum Arbeitsprojekt zurückkehrt, verschwunden ist.

 enter image description here

Edit 2: Immer noch Probleme beim Suchen ... festgestellt, dass bestimmte -Dateien beim Start von PHPStorm sofort ausgeführt werden und dieses Kontextmenü haben. Andere Dateien werden jedoch beim Start von PHPStorm nicht unterstützt. Wenn ich versuche, eine Datei ohne das zusätzliche Menü zu debuggen, gibt der Server 502, und die "guten" Dateien haben dann kein zusätzliches Menü. Wenn ich mit einem Kontextmenü beginne, das zuerst das zusätzliche Kontextmenü hat, wird es ausgeführt. Wenn ich jedoch mit einem folgte, funktioniert die erste Datei nicht mehr. Ich habe das Gefühl, dass ich "Fortschritt" mache, aber ich werde auch immer verwirrter, zumal ich jedes Mal versuche, eine andere Datei auszuführen, es fragt mich "[x] ist eine Konfiguration mit einer Instanz. Sind Sie sicher?" willst du den laufenden stoppen? " An dieser Stelle klicke ich auf "Stop and Rerun". Ich würde mir vorstellen, dass diejenigen, die 502 geben, nichts auf die "guten" Dateien übertragen haben, wenn die Dinge angehalten und erneut ausgeführt werden ... aber das scheint nicht der Fall zu sein.

Edit 3: Ich fragte mich, ob mein Interpreter-Setup möglicherweise schlecht ist, also schnappte ich mir securewamp ( http://securewamp.org/de/ ), holte die portable Version, Setup, verwendete Standard-Setup mit xdebug auf (diese Version: php_xdebug-2.4.0rc1-5.4-vc9.dll) und genau dasselbe Problem. 

Ich bin sogar bei einem Verlust an zusätzlichen Dingen zu überprüfen.

Edit 4: Extra sicher, dass es jetzt etwas in PHPStorm ist. Eine der PHP-Dateien, die nie funktioniert hat, habe ich direkt mit der php.exe geöffnet und es hat gut funktioniert. Es muss eine Einstellung in phpstorm sein, die ich vermisse, oder eine defekte Funktion.

Bearbeiten 5: Nach einer Spur potenzieller Ursachen haben Sie das Werkzeug Ausführen> Debugger überprüfen ausgeführt. Pfad und URL bleiben als Standard (kein Grund, sie zu ändern), und versuchen, die Ergebnisse in "Bitte überprüfen Sie, ob der Webpfad zum Validierungsskript korrekt konfiguriert ist" und zeigen mein Verzeichnis an.

Edit 6: Die Validierung wurde erst unter 127.0.0.1 aufgenommen, weil SecureWAMP darauf ausgeführt wurde. Das Deaktivieren des Servers führt dazu, dass das Validierungsskript nicht ausgeführt wurde: 'Verbindung abgelehnt: Verbinden'.

Edit 7: Wie von LazyOne ausgeführt, sind meine Dateien im ersten Bild zwei verschiedene Dateitypen (PHP und HTML). Ich habe es mit .php-Dateien auf beiden Seiten gemacht, ich habe mir gerade zwei der Dateien geholt, in denen ich gerade gearbeitet habe, für den Screenshot. Hier ist ein Beispiel für eines der PHP's .  enter image description here

Edit 8: Ich glaube, ich bekomme endlich ein solides Muster, wenn es funktioniert und wenn es nicht funktioniert ... Das Kontextmenüs war ein roter Hering. Ein Gerät ohne Untermenü funktioniert einwandfrei, wenn die Bedingungen erfüllt sind.

  • A: Eine Datei, die funktioniert (bisher wurde noch kein Muster für Arbeitsdateien festgestellt, verglichen mit Nichtarbeit, tatsächlich haben eine Arbeitsdatei und eine Nichtarbeitsdatei den gleichen Code).

  • B. Unter keinen Umständen kann eine Datei "Anhalten und erneut ausführen" gestartet werden, da dies dazu führt, dass die Datei anschließend auf ein fehlerhaftes Gateway trifft.

  • C. Sie können eine nicht funktionierende Datei nicht öffnen. Wenn Sie dies tun, bleibt der aktuelle Server hängen und wird so lange hängen bleiben, bis ein "Stop and Rerun" für eine andere Datei ausgeführt wird. Danach wird bei allen geöffneten Dateien der fehlerhafte Gateway-Fehler angezeigt. Das Öffnen einer nicht funktionierenden Datei führt dazu, dass die gerade arbeitenden Dateien den fehlerhaften Gateway-Fehler erhalten.

  • D. Damit die Arbeitsdateien wieder funktionieren, nachdem C oder D einen Neustart des Systems erfordert.

Edit 9: War mit dem Validate-Debugger-Konfigurationstool herumgekommen und hatte es schließlich dazu gebracht, mir eine andere Antwort zu geben (fühle mich dumm dafür, eigentlich musste ich nur das angezielte Verzeichnis in die URL zum Validierungsskript aufnehmen, obwohl ich dachte, dass die Website hostet direkt aus diesem Verzeichnis. Na ja. Wie auch immer, hatte einen Fehler, nicht sicher, ob es die Ursache meiner Probleme ist oder nicht, aber es wird untersucht.  enter image description here

Edit 10: Hinzufügen von php.ini zum obigen Fehler ... Xdebug.remote_enable = 1

Edit 11: Kein wirklicher Nutzen aus der hinzugefügten Zeile.Edit 12: Angeforderter Screenshot des Browsers posten .

  enter image description hereEdit 13: Aktualisierungen der EAP (10.0.2) -Version von phpStorm. Es scheint das gleiche Ergebnis zu sein, obwohl jetzt zumindest die Konsole mir den Fehler anzeigt, anstatt nur die Webseite. Ich habe auch versucht, vollständig durch den SecureWAMP-Apache-Server zu laufen, nur um herauszufinden, dass etwas daran hindert, mich vom Standardverzeichnis htdocs zu entfernen. 

.

  enter image description here

11
liljoshu

FWIW, ich denke, das könnte so einfach sein wie ein Timeout-Problem. 

Meine Umgebung ist den OPs Win764, PhpStorm 10.0.4, PHP 5.5.27 sehr ähnlich.

Ich habe einige automatisierte F3-Tests, bei denen der Fehler 502 Bad Gateway häufig angezeigt wird, wenn der Testcode "im Browser" mit einem der kleinen Symbole in der Symbolleiste ausgeführt wird, die rechts oben in meinem Code angezeigt wird. (Siehe Bild unten.)

Bei einigen meiner Testseiten scheint der Fehler nur das erste Mal zu sein. Einmal ausführen, fehlgeschlagen, erneut ausführen, funktioniert einwandfrei. Andere scheinen 2 oder 3 Durchläufe zu benötigen, bevor sie funktionieren. Aber ich habe ein Paar, das ich noch nie im Browser gesehen habe.

OTOH, wenn ich im Codefenster für eine dieser Seiten mit der rechten Maustaste klicke und debugge, läuft der Code einwandfrei, unabhängig davon, ob ich ihn vollständig durchlaufen lassen oder zeilenweise laufen lasse.

Mein Werkzeug-Setup ist eindeutig nicht falsch. Einige Tests können und werden jedes Mal vom Browser aus ausgeführt.

Was ich denke, ist, dass die wahrscheinlich fehlgeschlagenen Tests ziemlich umfangreiche Datenbankabfragen ausführen. Und mein PHP-Interpreter setzt meine Anforderungen aggressiv aus, wenn ich sie im Browser starte. 

Jedes Mal, wenn eine Seite ausgeführt wird und das Zeitlimit überschritten wird, werden eine oder mehrere ihrer Abfragen zwischengespeichert, und beim nächsten Ausführen der Seite wird die Seite schneller. Schließlich wird für diejenigen, die überhaupt laufen, genug von der Datenbankarbeit zwischengespeichert, damit die Seite unter dem Drahtseil vor dem Zeitlimit landen kann.

Das ist meine Theorie. Was ich nicht gefunden habe, ist, wo und wie das Zeitintervall des Interpreters geändert werden kann. Das ist das Timeout-Intervall, wenn es von PhpStorm ausgeführt wird. Ich habe schon

max_execution_time = 300

in meiner php.ini-Datei und kann sehen, dass es eingestellt wird, wenn ich phpinfo () verwende. Aber ich muss glauben, dass es außer Kraft gesetzt wird, wenn der Interpreter von PhpStorm ausgeführt wird.

Update - Mögliche Fehlerbehebung: Obwohl meine php.ini-Datei die Einstellung max_execution_time hat, habe ich versucht, meine php-Interpreter-Einstellungen wie auf dieser PhpStorm-Unterstützungsseite , Schritt 1 und 2 beschrieben, zu betrachten. Dort war meine max_execution_time 0. Also habe ich eine Einstellung dafür hinzugefügt, indem ich die Benutzeroberfläche auf dieser Seite mit den gleichen 300 wie in meiner php.ini verwende. (Dann habe ich PhpStorm geschlossen und wieder geöffnet - eine große Paranoia aus alten Programmierern.) Bis jetzt habe ich eine schlechte Gateway-Nachricht auf meiner "schlechtesten" Seite gesehen, aber sie lief sogar zum zweiten Mal. Die anderen scheinen alle zu Ende zu laufen. Ich werde ein wenig aufpassen und sehen, ob mir dieses "Fix" langfristig gut tut. 

(Und bevor sich jemand dazu gezwungen fühlt, darauf hinzuweisen: Ja, das Zwischenspeichern von Abfragen ist eine schreckliche Idee für automatisierte Tests. Muss behoben werden - aber erst nachdem ich herausgefunden habe, wie ich die Zeitspanne des Interpreters verlängern kann, damit meine Tests ohne Zwischenspeicherung erfolgreich sind.)

 enter image description here

2
Anne Gunn

Dies beantwortet die Frage nicht direkt, kann jedoch für Leute hilfreich sein, die über den 502 Bad Gateway-Fehler stolpern.

Eine andere Möglichkeit, einen 502 Bad Gateway - Fehler zu erhalten, besteht darin, dass ein PHP-Skript zu viele Fehler/Warnungen/Hinweise ausgibt. Ich hatte ein Skript, das Tausende von Benachrichtigungen generierte, weil nicht initialisierte Variablen zu dem 502 Bad Gateway - Fehler führten.

Eine Lösung besteht darin, den PHP-Code zu korrigieren, der diese Benachrichtigungen generiert, oder die Benachrichtigungsberichte in der php.ini-Datei zu deaktivieren, indem & ~E_NOTICE zur Einstellung error_reporting hinzugefügt wird.

Zum Beispiel

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