2013-09-16 29 views
6

Tôi sử dụng gỡ lỗi từ xa với PhpStorm, xdebug và nginx + php-fpm. Nginx repsond với mã lỗi 502 (Bad Gateway) khi tôi vượt qua XDEBUG_SESSION_START=my_ide_key theo yêu cầu tham số GET. Đồng thời, các điểm ngắt mã của tôi trong IDE hoạt động tốt. Khi tôi không vượt qua XDEBUG_SESSION_START tham số nginx đáp ứng với HTML được định dạng tốt và mã 200. Nhưng rõ ràng mà không có tham số này, nó không phải là gỡ lỗi.Xdebug đặt cookie XDEBUG_SESSION quá nhiều lần

Trong nhật ký lỗi nginx tôi thấy thông báo về tiêu đề lớn nhận được từ phía trên. Tôi cố gắng để đổ liên lạc giữa php-fpm và nginx và chỉ có một điều khác nhau là một trong Set-Cookie tiêu đề:

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

Tôi cố gắng để tìm thấy khi tiêu đề này xuất hiện trong phản ứng. Và tôi thấy rằng trong plugin thông minh của tôi Smarty_Internal_Template destructors (sau dòng mã cuối cùng của kịch bản khởi động) nếu tôi gọi headers_list() Tôi thấy số lượng lớn các tiêu đề Set-Cookie (các cuộc gọi hủy bằng nhau và số lượng tiêu đề Set-Cookie). Tôi chắc chắn rằng không có ai rõ ràng gọi header('Set-Cookie: XDEBUG_SESSION=...') trong mã của tôi. Tôi cố gắng nâng cấp và hạ cấp phiên bản xdebug nhưng vẫn có hành vi tương tự. Đặt mã số remove_header('Set-Cookie') tại số Smarty_Internal_Template giải quyết vấn đề của tôi nhưng đó là hack xấu xí!

Bất kỳ ý tưởng nào về tình huống kỳ lạ này?

+1

Một số thông tin bổ sung: có vẻ như tiêu đề 'Đặt cookie' được gọi cho mọi chức năng tắt máy đã đăng ký (từ khi tôi nhìn thấy khi thực hiện các chức năng tắt máy). Smarty không được sử dụng ở tất cả trong trường hợp của tôi. Dường như nó chỉ là một chức năng tắt-chức năng-in-chung-php. – jdunk

+1

Một điều kỳ lạ khác có thể có hoặc không liên quan: 'headers_list()' cũng cho tôi thấy rằng * hai tiêu đề 'Set-Cookie' cho XDEBUG_SESSION đã được đặt bằng dòng 1 của mã php của tôi. – jdunk

Trả lời

1

Tôi khuyên bạn không nên sử dụng XDEBUG_SESSION_START trong trường hợp này. Đối với tôi, có vẻ như XDEBUG_SESSION_START đang kích hoạt một số thực thi mã ở phía máy chủ để đặt cookie. Và đó là can thiệp với mã mẫu thông minh.

Trong tất cả các kinh nghiệm của tôi với PHPStorm, tôi đã phát hiện ra rằng cách tốt nhất để bật Xdebug là thông qua bookmarklet, mà bạn có thể tạo ra ở đây:

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

Các bookmarklet đặt cookie trong chính trình duyệt. Vì vậy, không có mã nào được thực hiện trong máy chủ để đặt XDEBUG_SESSION và các biến đường dẫn và có thể giảm hoặc loại bỏ sự can thiệp bằng mã thông minh.

Ngoài ra, một mẹo với PHPStorm là đảm bảo rằng PHPStorm đang hoạt động và kết nối mạng hoạt động bình thường giữa PHPStorm và php-fpm (tôi đoán đó là những gì bạn đang sử dụng kết hợp với nginx).

Nếu php-fpm không thể kết nối với PHPStorm, theo kinh nghiệm của tôi, mã cuối cùng sẽ thực thi trên máy chủ nhưng nó sẽ rất chậm.

Đã có một vài lần khi tôi thấy điều này sai về vấn đề hiệu suất và lãng phí nhiều thời gian.

+0

Tôi e rằng tôi không thể xác minh hoặc thậm chí đánh giá câu trả lời của bạn vì tôi không còn ở PHP nữa. Vì vậy, tôi muốn nhận được bất kỳ bình luận nào từ người bắt đầu tiền thưởng @jdunk. –

+1

@Devang, trong khi tôi đánh giá cao nỗ lực này, điều này thực sự không trả lời câu hỏi, đó là "Tại sao những tiêu đề" Set-Cookie "bổ sung này được thêm vào lúc tắt máy?" Mặc dù đúng là sử dụng cookie thay vì tham số GET sẽ dẫn đến các tiêu đề bổ sung đó không được tạo ra, điều này yêu cầu sử dụng cookie và cookie là để duy trì.Sử dụng tham số GET là cách duy nhất để nói "yêu cầu này chỉ" để, ví dụ, khi một trình duyệt kích hoạt một số yêu cầu khác cũng được xử lý bởi php, không bị mắc kẹt trong vòng lặp trình gỡ lỗi vượt quá yêu cầu đầu tiên đó . – jdunk

+1

Mục đích trong việc đăng tải tiền thưởng của tôi là để hiểu rõ hơn về xdebug và/hoặc lý do tại sao các tiêu đề đó được đặt. Tôi có cách giải quyết riêng của mình và @Ostrovski đã cung cấp một câu hỏi trong câu hỏi của anh ấy. Tiền thưởng là cho một câu trả lời hơi thỏa mãn lại: cơ chế của những tiêu đề xdebug đó. – jdunk

Các vấn đề liên quan