php项目使用xdebug远程调试
0. 目的、原理和調(diào)用流程
訪問測試環(huán)境的頁面,在本地開發(fā)機(jī)打斷點調(diào)試。相當(dāng)流弊的功能,方便代碼排查原因。
原理:
運(yùn)行xdebug需要客戶端IDE(phpstorm)、遠(yuǎn)程服務(wù)器配合,首先是客戶端配置好端口,發(fā)送debug請求,請求會通過瀏覽器或者IDE的http請求,攜帶特定的參數(shù)發(fā)送到服務(wù)端,服務(wù)端收到請求后,發(fā)現(xiàn)這是一個xdebug請求,則與IDE建立dpgp連接,當(dāng)遇到斷點時候,返回調(diào)試信息給IDE
- 服務(wù)器的IP是10.0.1.2,端口80上有HTTP
- IDE位于未知IP上,因此xdebug.remote_connect_back設(shè)置為1
- IDE偵聽端口9000,因此xdebug.remote_port設(shè)置為9000
- 發(fā)出HTTP請求,Xdebug從HTTP頭中檢測IP地址
- Xdebug連接到端口9000上檢測到的IP(10.0.1.42)
- 調(diào)試運(yùn)行,提供HTTP響應(yīng)
調(diào)用流程:
以上內(nèi)容摘自storyflow的博客,感謝原作者。
好的,搞清楚原理之后,把上面的Ip、端口號這些統(tǒng)統(tǒng)忘記,以免跟下面演示的IP、端口搞混。 (搞不清楚就算了,反正也要忘記 ^ _ ^ )
現(xiàn)在 我們正式開始一段愉快的學(xué)習(xí)之旅吧。
1.機(jī)器環(huán)境:
注意,我本地開發(fā)機(jī)并沒有安裝php.exe等其他任何開發(fā)工具。
服務(wù)器也安裝了php-fpm/nginx等所有開發(fā)依賴環(huán)境。
2.Linux服務(wù)器安裝xdebug擴(kuò)展
2.1.下載對應(yīng)版本的xdebug擴(kuò)展包
- 最新版本下載地址:https://xdebug.org/download.php
- 歷史版本下載地址:https://xdebug.org/download/historical
我下載的是xdebug-2.5.4.tgz這個版本。
2.2.xdebug-2.5.4.tgz上傳到服務(wù)器的/opt目錄下,解壓并進(jìn)入目錄:
tar-zxvf xdebug-2.5.4-tgz cd /opt/xdebug-2.5.42.3.執(zhí)行php安裝擴(kuò)展包的命令
注意:執(zhí)行此命令的時候,/phpize前面的路徑得替換為你機(jī)器上的php真實安裝路徑。
/opt/remi/php56/root/bin/phpize我在執(zhí)行此命令后報錯,原因是沒有安裝php-devel開發(fā)工具:
于是先安裝php-dev工具:
#列出安裝包的所有版本 yum list | grep php-devel #找到對應(yīng)版本的安裝包,執(zhí)行安裝 yum install php56-php-devel.x86_64操作過程如下圖:
2.4.重新執(zhí)行命令
注意:執(zhí)行此命令的時候,/phpize前面的路徑得替換為你機(jī)器上的php真實安裝路徑。
/opt/remi/php56/root/bin/phpize2.5. 編譯xdebug擴(kuò)展包
注意:執(zhí)行此命令的時候,/php-config前面的路徑得替換為你機(jī)器上的php真實安裝路徑。
./configure --enable-xdebug --with-php-config=/opt/remi/php56/root/bin/php-config執(zhí)行成功,再執(zhí)行:
make && make install2.6. 安裝成功后,去php modules路徑下看看,是否有xdebug.so文件:
3. Linux服務(wù)器配置php.ini
3.1. 在php.ini文件中追加參數(shù):
注意:xdebug.remote_port端口號為9009,是指你本地開發(fā)機(jī)的監(jiān)聽端口號,當(dāng)然也可以改為其他端口號。
zend_extension="xdebug.so" xdebug.remote_enable=On #本地開發(fā)機(jī)端口,測試服務(wù)器會講debug信息發(fā)送到此端口 xdebug.remote_port=9009 xdebug.idekey=PHPSTORM #如果開啟此remote_connect_back,則忽略xdebug.remote_host的參數(shù) xdebug.remote_connect_back = 1 xdebug.remote_handler = dbgp xdebug.auto_trace = 1 xdebug.remote_log = /tmp/xdebug.log3.2. 配置轉(zhuǎn)發(fā)端口9009
因為debug session通訊數(shù)據(jù)是從linux服務(wù)器發(fā)送到你本地開發(fā)機(jī),所以需要配置ssh轉(zhuǎn)發(fā)通道(ssh tunnel)
ssh工具我用的是MobaXterm軟件,轉(zhuǎn)發(fā)通道配置如下圖,你也可以使用CRT, xshell等其他工具,原理是相同的。
sshCRT配置大概是這樣的:
- 遠(yuǎn)程主機(jī)上鍵入telnet命令 telnet 127.0.0.1 9009 檢查是否能夠訪問9009 端口。
- 如果有端口沖突可以調(diào)整。
- 如果啟動了防火墻firewall-cmd --state,記得開放此端口。
4.本地開發(fā)機(jī)phpStorm配置
4.1. phpStorm debug配置端口
4.2. dbgp proxy配置
4.3. servers配置映射路徑path mappings
4.4. 開啟、關(guān)閉監(jiān)聽
5. chrome瀏覽器安裝xdebug-helper插件
5.1. 擴(kuò)展包下載
https://chrome.google.com/webstore/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc
5.2. 啟動xdebug
安裝后你可能需要重啟瀏覽器,此插件才能正常運(yùn)行。
蟲子為綠色即為運(yùn)行中:
此插件的作用是在cookie中設(shè)值:
6. 打斷點調(diào)試
在登錄方法打斷點,瀏覽器訪問http://test.php.com,可以進(jìn)入斷點:
6.postman設(shè)置cookie方式
如果只是通過postman方式調(diào)用接口,則需要在postman的cookie中,先添加域名:
然后在對應(yīng)域名下添加cookie: XDEBUG_SESSION=PHPSTORM;
主要參考資料:
https://segmentfault.com/a/1190000016366104
https://juejin.cn/post/6844903728193994766
https://www.cnblogs.com/ding-daisy/p/10142023.html
總結(jié)
以上是生活随笔為你收集整理的php项目使用xdebug远程调试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Apache Log4j2 远程代码执行
- 下一篇: 架构模块化设计