2013-09-16 9 views
6

Używam zdalnego debugowania za pomocą PhpStorm, xdebug i nginx + php-fpm. Nginx repsond z 502 kodem błędu (Bad Gateway), gdy przekazuję XDEBUG_SESSION_START=my_ide_key na żądanie parametr GET. W tym samym czasie moje punkty przerwania kodu w IDE działają dobrze. Kiedy nie przekazuję parametru nginx, odpowiadam dobrze sformatowanym kodem HTML i kodem 200. Ale bez tego parametru nie ma debugowania.Xdebug ustaw plik cookie XDEBUG_SESSION zbyt wiele razy

W dzienniku błędów nginx widzę powiadomienia o dużym nagłówku otrzymanym od dostawcy. Staram się zrzucić komunikację między php-fpm i nginx i tylko jedną inną rzeczą jest jednym Set-Cookie nagłówek:

Set-Cookie: XDEBUG_SESSION=666; expires=Mon, 16-Sep-2013 16:07:28 GMT; path=/ 

staram się znaleźć, gdy ten pojawi się w nagłówki odpowiedzi. I znalazłem, że w mojej smarty wtyczki Smarty_Internal_Template destruktory (po ostatniej linii kodu skryptu uruchamiania), jeśli zadzwonię pod numer headers_list(), widzę rosnącą liczbę nagłówków Set-Cookie (równe wywołania destruktora i liczba nagłówków Set-Cookie). Jestem pewien, że nie ma jednoznacznego wywołania header('Set-Cookie: XDEBUG_SESSION=...') w moim kodzie. Próbuję uaktualnić i obniżyć wersję xdebug, ale nadal zachowuję się tak samo. Umieść kod remove_header('Set-Cookie') pod adresem Smarty_Internal_Template rozwiązuje mój problem, ale to jest brzydki hack!

Jakieś pomysły na temat tej dziwnej sytuacji?

+1

Kilka dodatkowych informacji: wygląda na to, że nagłówek "Set-Cookie" jest wywoływany dla każdej zarejestrowanej funkcji wyłączania (od kiedy zobaczyłem po przejściu przez wykonywanie moich funkcji zamykania). Smarty w ogóle nie jest używany w moim przypadku. Wygląda na to, że jest to funkcja php-shutdown-in-general. – jdunk

+1

Kolejne dziwactwo, które może ale nie musi być powiązane: 'headers_list()' również pokazuje mi, że * dwa * Nagłówki "Set-Cookie" dla XDEBUG_SESSION są już ustawione linią 1 mojego kodu php. – jdunk

Odpowiedz

1

Proponuję nie używać XDEBUG_SESSION_START w tym przypadku. Dla mnie wygląda na to, że XDEBUG_SESSION_START uruchamia wykonanie kodu po stronie serwera, aby ustawić plik cookie. A to ingeruje w smarty szablon kodu.

We wszystkich moich doświadczeń z PHPStorm, znalazłem, że najlepszym sposobem, aby włączyć XDebug jest poprzez bookmarklet, który można wygenerować tutaj:

https://www.jetbrains.com/phpstorm/marklets/

bookmarkletu ustawia cookie w sama przeglądarka. Tak więc, żaden kod nie jest wykonywany na serwerze, aby ustawić XDEBUG_SESSION i zmienne ścieżki, a to może zmniejszyć lub wyeliminować zakłócenia z kodem smarty.

Jedną wskazówką z PHPStorm jest upewnienie się, że PHPStorm jest uruchomiony, a połączenie sieciowe działa prawidłowo między PHPStorm i php-fpm (domyślam się, że to jest to, czego używasz w połączeniu z nginx).

Jeśli php-fpm nie może połączyć się z PHPStorm, z mojego doświadczenia wynika, że ​​kod zostanie ostatecznie wykonany na serwerze, ale będzie bardzo wolny.

Było kilka razy, kiedy zobaczyłem to błędnie jako problem z wydajnością i zmarnowałem dużo czasu.

+0

Obawiam się, że nie mogę zweryfikować ani nawet ocenić twojej odpowiedzi, ponieważ nie jestem już w PHP. Chciałbym otrzymać wszelkie komentarze od bounty-starter @jdunk. –

+1

@Devang, podczas gdy ja doceniam wysiłek, to naprawdę nie odpowiada na pytanie, które jest "Dlaczego te dodatkowe nagłówki" Set-Cookie "są dodawane podczas zamykania systemu?" Chociaż prawdą jest, że użycie pliku cookie zamiast parametru GET powoduje, że dodatkowe nagłówki nie są tworzone, wymaga to użycia pliku cookie, a pliki cookie są wykorzystywane do utrwalania.Używanie parametru GET jest jedynym sposobem, aby powiedzieć "tylko to żądanie", aby na przykład, gdy przeglądarka odpali kilka innych żądań, które również zostaną przetworzone przez php, jeden nie utknął w pętli debuggera daleko poza to pierwsze żądanie . – jdunk

+1

Celem mojego ogłoszenia o nagrodach był szczególny wgląd do xdebug i/lub dlaczego te nagłówki są ustawiane. Mam swoje własne obejście, a @Odrowski dostarczył jeden w swoim pytaniu. Nagroda za nieco satysfakcjonującą odpowiedź: mechanika tych nagłówków xdebug. – jdunk