2013-09-16 67 views
6

我使用PhpStorm,xdebug和nginx + php-fpm進行遠程調試。當我通過請求GET參數XDEBUG_SESSION_START=my_ide_key Nginx repsond 502錯誤代碼(壞網關)。同時,我在IDE中的代碼斷點工作正常。當我沒有通過XDEBUG_SESSION_START參數時,nginx響應格式良好的HTML和代碼200.但是,如果沒有這個參數,它顯然是沒有調試的。Xdebug設置cookie XDEBUG_SESSION太多次

在nginx錯誤日誌中,我看到有關從上游收到的大標題的通知。我試圖轉儲PHP-FPM和nginx的,只是一個不同的事物之間的通信是一個Set-Cookie標題:

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

我試圖找到這個時候出現頭響應。我發現在我的smarty插件Smarty_Internal_Template析構函數(在我的啓動腳本的最後一行代碼之後),如果我打電話headers_list(),我看到Set-Cookie頭文件的數量正在增長(相等的析構函數調用和Set-Cookie頭文件量)。我確信在我的代碼中沒有明確的header('Set-Cookie: XDEBUG_SESSION=...')調用。我嘗試升級和降級xdebug版本,但仍具有相同的行爲。地方代碼remove_header('Set-Cookie')Smarty_Internal_Template解決我的問題,但這是醜陋的黑客!

關於這種奇怪的情況的任何想法?

+1

一些額外的信息:它看起來像爲每個註冊的關閉函數調用了「Set-Cookie」頭文件(從我在執行完關閉函數時看到)。在我的情況下,Smarty根本沒有被使用。看起來這只是一個php-shutdown-function-general-general的事情。 – jdunk

+1

另一個可能相關或不相關的奇怪之處:'headers_list()'還表明XDEBUG_SESSION的*兩個*'Set-Cookie'頭文件已經被我的php代碼的第一行設置。 – jdunk

回答

1

我建議在這種情況下不要使用XDEBUG_SESSION_START。對我來說,看起來XDEBUG_SESSION_START正在觸發服務器端的一些代碼執行來設置cookie。這是干擾聰明的模板代碼。

在所有我與PHPStorm的經驗,我發現打開了XDebug最好的辦法是通過書籤,它可以產生在這裏:

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

的書籤設置cookie中瀏覽器本身。因此,在服務器中不執行代碼來設置XDEBUG_SESSION和路徑變量,並且可以減少或消除對smarty代碼的干擾。

此外,PHPStorm的一個提示是確保PHPStorm已啓動並運行,並且網絡連接在PHPStorm和php-fpm之間正常工作(我推測這就是您與nginx結合使用的情況)。

如果php-fpm無法連接到PHPStorm,根據我的經驗,代碼最終會在服務器上執行,但速度會非常慢。

有幾次我錯誤地把它看作是一個性能問題,浪費了很多時間。

+0

恐怕我無法驗證甚至評估您的答案,因爲我不在PHP了。所以,我想收到來自賞金髮起人@jdunk的任何評論。 –

+1

@Devang,雖然我很欣賞這種努力,但這實際上並沒有回答這個問題,即「爲什麼這些額外的'Set-Cookie'頭文件在關閉時添加了?」 儘管使用cookie而不是GET參數確實會導致不會生成這些額外的頭文件,但這需要使用cookie,並且cookie是用於持久性的。使用GET參數是說「僅此請求」的唯一方式,例如,當瀏覽器觸發其他幾個也被php處理的請求時,其中一個不會停留在遠遠超出第一個請求的調試器循環中。 – jdunk

+1

我發佈賞金的目的是爲了瞭解xdebug特有的洞察力和/或爲什麼這些頭文件正在設置。我有我自己的解決方法,@Ostrovski在他的問題中提供了一個。賞金是一個有點令人滿意的答案:這些xdebug標題的機制。 – jdunk