web-dev-qa-db-fra.com

502 Mauvaise passerelle PHP Storm mais interprète et exécutable sont définis

  • Système d'exploitation: Windows 7 - 64 bits 
  • PHP: php.exe autonome (PHP version 5.5) 
  • PHPStorm Version: 10.0.1

Tous les conseils que je vois pour surmonter l’erreur 502 Gateway dans PhpStorm consistent simplement à vous assurer que vous disposez de votre interpréteur et de votre ensemble d’exécutables. J'utilise la version autonome php.exe ( http://windows.php.net/download#php-5.5 VC11 x86 Thread Safe (2015-oct-01 01:25:56)) et tout est réglé vers PHP 5.5

 enter image description here

Je suis honnêtement confus pourquoi je reçois encore 502 erreurs.

Je l'ai exécuté plusieurs fois, et il s'est exécuté une fois (il n'y a pas eu de changement d'instance antérieure ou postérieure), ce que j'ai trouvé profondément étrange, mais uniquement pour le chargement d'une page et ce n'était pas un événement pouvant être répété.

Edit: Réalisé une différence lorsque j'ai ouvert un autre projet à comparer. La seule fois que cela a fonctionné, le menu contextuel du clic droit était différent. L'autre projet est en train de déboguer parfaitement. Qu'est-ce qui fait la différence? Ce qui donne? Les deux projets utilisent le même interprète. 

... Également constaté que, dans le projet en cours, l'élément de menu contextuel supplémentaire a disparu.

 enter image description here

Edit 2: Still problem hunt ... a découvert que certains fichiers fonctionneront correctement au démarrage de PHPStorm et comporteront ce menu contextuel. D'autres fichiers, cependant, ne le seront pas au démarrage de PHPStorm. Si je tente de déboguer un fichier sans le menu supplémentaire, le serveur donnera 502 et les "bons" fichiers n'auront pas le menu supplémentaire. Si je commence par un fichier contenant le menu contextuel supplémentaire en premier, il s'exécutera, mais si je ne suis pas le premier, le premier fichier cesse de fonctionner. Je sens que je fais des "progrès" mais je suis aussi plus confus, surtout que chaque fois que j'essaie de lancer un fichier différent, il me demande "[x] est une configuration d'exécution à une seule instance. Etes-vous sûr vous voulez arrêter celui qui court? " A ce moment, je clique sur "Arrêter et réexécuter". Je penserais que ceux qui donneraient 502 n'auraient rien dans les "bons" fichiers si les choses étaient arrêtées et réexécutées ... mais cela ne semble pas être le cas.

Edit 3: Je me demandais si la configuration de mon interpréteur était mauvaise, alors j’ai récupéré securewamp ( http://securewamp.org/en/ ), obtenu la version portable, la configuration, la configuration par défaut utilisée avec xdebug ajoutée sur (cette version: php_xdebug-2.4.0rc1-5.4-vc9.dll) et exactement le même problème. 

Je suis même à court de choses supplémentaires à vérifier.

Edit 4: Assurez-vous que c'est quelque chose dans PHPStorm maintenant. Un des fichiers php qui ne fonctionnait pas, j’ai ouvert directement avec php.exe et cela a bien fonctionné. Il doit y avoir un paramètre dans phpstorm qui me manque, ou une fonction cassée.

Edit 5: Après une série de causes potentielles, essayez l'outil Run> Validate Debugger. Le chemin et l'URL sont laissés à leur valeur par défaut (aucune raison de les modifier) ​​et une tentative de vérification aboutit à "Vérifiez que le chemin Web du script de validation est correctement configuré" et répertorie mon répertoire.

Edit 6: La validation ne commençait que sur 127.0.0.1 parce que c’était la raison de l’exécution de SecureWAMP. La désactivation de son serveur entraîne "l'échec de l'exécution du script de validation:" Connexion refusée: connexion ".

Edit 7: Comme l'a souligné LazyOne, mes fichiers dans la première image sont deux types de fichiers différents (php et html). Je l'ai fait avec les fichiers .php des deux côtés, je viens de récupérer deux des fichiers sur lesquels je travaillais actuellement pour la capture d'écran. Voici un exemple de l'un des php's .  enter image description here

Edit 8: Je pense que je finis par avoir un motif solide quand ça marche et quand ça ne marche pas .. Le menu contextuel était un clin d'œil. Ceux sans sous-menu fonctionneront très bien lorsque les conditions seront remplies.

  • A. Un fichier qui fonctionne (jusqu’à présent, aucun modèle observé pour les fichiers de travail vs non-travail, en fait, un fichier de travail et un fichier de non-travail ont exactement le même code) doit être sélectionné.

  • B. Ne peut, sous aucune condition, "Arrêter et réexécuter" un fichier car cela entraînerait le fichier après coup passerelle incorrecte.

  • C. Vous ne pouvez pas ouvrir un fichier non fonctionnel. Si vous le faites, le serveur actuel se bloque et le restera jusqu'à l'exécution d'un "arrêt et réexécution" sur un fichier différent, après quoi tous les fichiers ouverts obtiendront l'erreur de passerelle incorrecte. Si vous ouvrez un fichier qui ne fonctionne pas, les fichiers en cours de traitement obtiendront une erreur de passerelle incorrecte.

  • D. Pour que les fichiers de travail fonctionnent à nouveau après C ou D, il est nécessaire de redémarrer le système.

Edit 9: Je bidouillais avec l'outil de configuration du débogueur de validation, et je l'ai finalement obtenu une réponse différente (je me sens idiot pour cela, en fait, je devais simplement inclure le répertoire ciblé dans l'URL du script de validation, même si je pensais que le site hébergeait En tout cas, il y avait une erreur, je ne sais pas si c'est la cause de mes problèmes ou non, mais nous allons la rechercher.  enter image description here

Éditer 10: Ajouter au php.ini pour résoudre l’erreur ci-dessus ... Xdebug.remote_enable = 1

Edit 11: Aucun avantage réel vu de la ligne ajoutée.Edit 12: Poster la capture d'écran demandée du navigateur .

  enter image description hereEdit 13: Mises à jour de la version EAP (10.0.2) de phpStorm. Il semble que le résultat soit le même jusqu’à présent, bien que maintenant au moins la console me montre l’erreur aussi au lieu de simplement la page Web. J'ai également essayé de faire fonctionner complètement le serveur Apache de SecureWAMP pour découvrir que quelque chose m'empêchait de quitter le répertoire htdocs par défaut. 

.

  enter image description here

11
liljoshu

FWIW, je pense que cela pourrait être aussi simple qu’un problème de temporisation. 

Mon environnement est très similaire aux OP, Win764, PhpStorm 10.0.4, PHP 5.5.27.

J'ai quelques tests automatisés F3 où je vois fréquemment l'erreur 502 Bad Gateway lorsque j'exécute le code de test 'dans le navigateur' en utilisant l'une des petites icônes de la barre d'outils qui flotte dans le coin supérieur droit de mon code. (Voir image ci-dessous.)

Pour certaines de mes pages de test, l’erreur semble ne concerner que la première fois. Exécuter une fois, échoue, s'exécute à nouveau, fonctionne bien. D'autres semblent nécessiter 2 ou 3 essais avant de pouvoir fonctionner. Mais j'ai un couple que je n'ai jamais vu travailler dans le navigateur.

OTOH, si je clique avec le bouton droit de la souris sur la page de code pour l’une de ces pages et que je corrige, le code fonctionne correctement, que je le laisse exécuter ou le parcoure ligne par ligne.

Clairement, la configuration de mes outils n’est pas erronée. Certains tests peuvent et fonctionnent à partir du navigateur à chaque fois.

Ce que je pense, c'est que les tests susceptibles d'échouer exécutent des requêtes de base de données assez lourdes. Et mon interprète php chronomètre de manière agressive mes demandes lorsque je les lance dans le navigateur. 

Toutefois, chaque fois qu'une page est exécutée et expirée, une ou plusieurs de ses requêtes sont mises en cache et la prochaine fois que je l'exécute, la page est plus rapide. Finalement, pour ceux qui seront exécutés, une quantité suffisante de travail de base de données est mise en cache afin que la page puisse entrer sous le fil et se terminer avant la fin du temps imparti.

Donc c'est ma théorie. Ce que je n’ai pas trouvé, c’est où et comment modifier le délai d’exécution de l’interprète. C'est-à-dire l'intervalle de temporisation lorsqu'il est exécuté à partir de PhpStorm. J'ai déjà

max_execution_time = 300

dans mon fichier php.ini et peut voir qu'il est défini lorsque j'utilise phpinfo (). Mais je dois croire que cela est annulé lorsque l'interpréteur est exécuté depuis PhpStorm.

Mise à jour - correction possible: Ainsi, même si mon fichier php.ini a ce paramètre max_execution_time, j'ai essayé de consulter les paramètres de mon interprète php comme décrit dans cette page de support PhpStorm , étapes 1 et 2. Mon max_execution_time était 0. Donc, j'ai ajouté un paramètre pour qu'il utilise l'interface utilisateur de cette page comme étant le même 300 que j'ai dans mon php.ini. (Puis j'ai fermé et ré-ouvert PhpStorm - une grosse paranoïa de vieux programmeur.) Jusqu'à présent, j'ai vu un mauvais message de passerelle sur ma page "pire" mais même la deuxième fois. Les autres semblent tous être en cours d'exécution. Je vais faire une attente attentive et voir si cette solution me fait du bien à long terme. 

(Et avant que quiconque ne se sente obligé de le préciser: oui, la mise en cache des requêtes est une idée terrible pour les tests automatisés. Je dois régler ce problème, mais seulement après avoir compris comment étendre le délai d'attente de l'interprète afin que mes tests puissent réussir sans mise en cache.)

 enter image description here

2
Anne Gunn

Cela ne répond pas directement à la question, mais pourrait être utile aux personnes qui tombent sur l'erreur 502 Bad Gateway.

Un autre moyen d’obtenir une erreur 502 Bad Gateway est lorsqu’un script php émet trop d’erreurs/avertissements/avis. J'avais un script qui générait des milliers de notifications à cause de variables non initialisées qui conduiraient à l'erreur 502 Bad Gateway.

Une solution consiste à corriger le code php générant ces notifications ou à désactiver le rapport des notifications dans le fichier php.ini en ajoutant & ~E_NOTICE au paramètre error_reporting.

Par exemple

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