現在我們自己公司的各種開發和測試服務器,都是使用阿里雲的服務器。一些PHP的項目,無法在本地搭建完整的環境,在外網服務器上調試更方便定位問題。發現網上沒有完整的關於如何配置PHPStorm和XDebug遠程調試的資料,自己配置的過程遇到一些問題,寫出來給大家做一個參考。
演示環境
本地開發環境:Mac Pro + PHPStorm 9.0
服務器的環境:Ubuntu 14 LTS + PHP 5.5 + XDebug 2.2.3
不管是Windows還是其它的Linux的版本,具體的配置差不多,一樣可以作為一個參考。
准備工作
1. 開發環境上安裝 PHPStorm,服務器上安裝好PHP
2. 在服務端安裝XDebug,Ubuntu上 apt-get install php5-xdebug。
3. 安裝完XDebug后,在php.ini里面加入如下的XDebug配置,配置如下。
[xdebug]
zend_extension=/usr/lib/php5/20121212/xdebug.so
xdebug.remote_enable=1
xdebug.remote_host=127.0.0.1
xdebug.remote_port=7777
xdebug.idekey=PHPSTORM
上面每行解釋一下
zend_extension,這個配置為xdebug的安裝路徑,這個根據自己具體的安裝的情況填寫。
remote_enable 和 remote_host 分別配置為1和127.0.0.1
remote_port,這個默認值為9000,如果這個端口被其它進程占用了就需要換一個。我這里因為配置了nginx和php-fpm,9000端口已經被占用,所以我換了一個7777。注意,這里的這個端口要和PHPStorm中的設置保持一致,如下圖:
idekey設置為PHPSTORM,這個字符串在啟動調試的時候要用到,后面再解釋這個。
4. 驗證一下配置,使用phpinfo看一下輸出,查看輸出里面是否有xdebug的內容。注意,如果之前有配置過比如zend debugger之類其它的調試工具,需要先從php.ini里面把其它的調試配置去掉,不能同時配置兩個調試工具。
開始調試
調試的過程如下:
1. 第一步,先在PhpStorm里面開始監聽調試請求,圖標里面的從紅色變成綠色,表示開始監聽了。
點擊變為如下:
2. 建立好斷點。
3. 從開發環境上,創建一個到服務器上的SSH連接通道,Linux/Mac下使用下面的命令:
ssh -R 9000:localhost:9000 root@服務器的IP地址
注意這個寫法,一個是本地端口地址,一個是遠程的端口地址,默認情況下都是9000。但是如果之前修改過,那么端口需要換。比如我這里端口改成了7777,命令就應該是如下的樣子:
ssh -R 7777:localhost:7777 root@21.23.222.113
注意,第3步一定要在第1步之后,也就是說建立這個通道之前,必須先開始監聽。
如果開發環境是windowds,那么需要使用putty去建立這個連接通道。具體的方法參考:https://confluence.jetbrains.com/display/PhpStorm/Remote+debugging+in+PhpStorm+via+SSH+tunnel
4. 激活服務端的調試器
通過在請求里面帶上 XDEBUG_SESSION 參數,並且把參數值設置為之前XDebug里面配置的“idekey”的值,就可以激活服務端的調試。
例如,可以在POST或者GET參數里面加上 XDEBUG_SESSION=PHPSTORM,服務端就會啟動調試了。 比如我們要調試 http://www.abc.com/test.php,那么訪問鏈接http://www.abc.com/test.php?XDEBUG_SESSION=PHPSTORM 就可以啟動調試了。
具體的原理是這樣的,服務端收到請求后,XDebug會檢查參數里面的XDEBUG_SESSION值是否等於“idekey”的值,如果相等,那么就說明需要調試,否則就不調試。這個參數也可以設置在Cookie里面。為了調試方便,可以把下面的兩端腳本作為鏈接收藏到書簽欄,每次如果要調試就調用第一段腳本在Cookie里面寫入XDEBUG_SESSION參數,如果要停止調試,那么就調用第二段腳本移除XDEBUG_SESSION參數的值。
javascript:(function() {document.cookie='XDEBUG_SESSION='+'PHPSTORM'+';path=/;';})()
javascript:(function() {document.cookie='XDEBUG_SESSION='+''+';expires=Mon, 05 Jul 2000 00:00:00 GMT;path=/;';})()
我自己的書簽欄就是這么設置的:
5.開始調試
一切都弄好后,直接在瀏覽器里面訪問服務端的頁面,PHPStorm就會檢測到調試連接並進入調試狀態。
注意,需要先配置好一個部署,把本地文件和服務端的文件做好映射,不然會提示文件映射錯誤。
推薦參考鏈接
https://confluence.jetbrains.com/display/PhpStorm/Remote+debugging+in+PhpStorm+via+SSH+tunnel
https://confluence.jetbrains.com/display/PhpStorm/Zero-configuration+Web+Application+Debugging+with+Xdebug+and+PhpStorm#Zero-configurationWebApplicationDebuggingwithXdebugandPhpStorm-4.Activatedebuggeronserver