通過Xdebug進行遠程調試時,PHPSTORM等IDE會監聽Xdebug設置的調試ip和端口(php.ini中配置)
[xdebug] ; Xdebug zend_extension=php_xdebug.dll xdebug.remote_enable = On xdebug.remote_host = 127.0.0.1 xdebug.remote_port = 9000 xdebug.idekey="PHPSTORM"
下面這張截圖是phpstorm開啟listening for php debug connections
後:
並在當前調試的URL後面加上了XDEBUG_SESSION_START
的請求參數,參數值為IDE標識,這個標識相當於用戶名,用以區別不同的IDE(chrome或者firefox中的xdebug擴展(firefox中我用的是The easiest Xdebug) 是通過設置cookie的方式),然後向PHP服務器發送請求,例如:http://www.example.com?XDEBUG_SESSION_START=ECLIPSE_DBGP&KEY=13986635740313。
而通過xdebug firefox插件則可以看到請求時會帶一個cookie:
[默認配置下,Xdebug只能為一個客戶端提供遠程調試服務,如果想要為多個客戶端提供遠程調試服務,則需要設置xdebug.remote_connect_back = 1
。]
當客戶端和Xdebug建立DBGP(phpstorm中配置debug時需要在file->settings->Languages & Frameworks->PHP->Debug->DBGp Proxy
)連接後,客戶端就可以為我們提供遠程調試服務了,遠程調試會話開啟流程如下圖所示:
如果我們想要終止遠程調試,客戶端同樣會在當前調試的URL後面加上XDEBUG_SESSION_STOP
或XDEBUG_SESSION_STOP_NO_EXEC
(XDEBUG_SESSION_STOP_NO_EXEC表示腳本尚未執行)參數,然後向PHP服務器發送請求,鏈接例如:
http://localhost/index.php?XDEBUG_SESSION_STOP_NO_EXEC=ECLIPSE_DBGP&KEY=13986635740313
Xdebug模塊檢測到URL中的該參數時,則會終止掉與指定客戶端的連接與會話。
參考文章:http://www.softown.cn/post/117.html