PHPstorm接口調試與postman接口調試工具


  初次接觸postman是剛學laravel的時候,一直丟在一邊沒用,最近忙公司內部項目,項目使用到的技術棧有Tp  Vue  ElementUI,由於使用到了前后端分離的架構,有時候在調試的時候也沒難么好調了。

  先看看初學時的調試流程吧,哪里報錯 var_dump() 哪里,沒錯,最初 var_dump() 是萬能的,但是有時候這樣效率很低下,不過有一個好處就是你能知道程序完整的執行流程,一步步 var_dump() 下去,能知道哪里數據處理出現了錯誤。

  之后接觸了Xdebug,Xdebug可用於PHPstorm的斷點調試,關於PHPstorm的配置,網上很多的配置都大同小異,試了很多都不行,最終參考了這個視頻phpstorm配置。視頻講的很詳細從瀏覽器配置到接口以及到遠程,我這里目前就接觸了前兩個。

  瀏覽器端配置:

  1.下載Xdebug helper擴展程序(進入谷歌商店搜索即可下載)

  2.Xdebug helper配置:在擴展程序選項中選擇IDEkey並配置為PHPStorm(其實可以忽略,視頻里有講為什么,后面也有提到為什么可以忽略)

  本地環境配置:我使用的是phpstudy,配置如下。

[xdebug]
xdebug.remote_enable=1
xdebug.max_nesting_level=600

  其實就兩行,關於phpstorm的配置:xdebug關聯的php版本

 

  端口配置

 

 

 

 

   Servers配置:

 

 

   配置好后測試xdebug配置是否正確,一般來說應該是這樣子的

 

 

   好了以后打斷點,並在瀏覽器端啟用擴展程序,請求就可以進來了,接下來如何去調應該很簡單了。

  關於調好之后的超時問題

  有時候調着調着就超時了,一般為30秒左右,這樣子調試的效率非常低下,為了解決這個問題,我查了蠻多的,改配置文件的timeout似乎沒有用,於是我參考了這篇文章php斷點調試超時設置(適用於Apache),至於nginx,這個目前還沒去研究,按它的配置,好使了,想調多久都可以。

  關於接口調試的問題,上面我說了瀏覽器的擴展程序配置選者IDEkey時可以不用配置,這里正好做下解釋。

  我們在調試接口時有時候前端和后台是分離的,在兩個完全不同的服務器上,即跨域。我們使用的是Vue,在我們執行 npm run dev之后,會在本地開啟一個服務用來訪問,此時我們的訪問的地址可能是127.0.0.1:8080,127.0.0.1:8090等,然后PHP后台可能部署在本地是XX.cn,於是上面的瀏覽器調試就不好使了。

  這里就要說到Xdebug helper的作用了,在它被啟用的時候,實質上是在你請求的時候生成了一個名為XDEBUG_SESSION=phpstorm(你所設置的IDEkey)的cookie,當服務器檢測到有這個cookie 的時候,就進入斷點調試的流程,至於接口為什么沒用,是因為它生成的cookie是對於127.0.0.1的這個網站的,識別cookie進行斷點調試的過程是xx.cn需要干的事即你接口請求的域名。至於設置什么從cookie的值是什么,本地親測只要有名為XDEBUG_SESSION這個cookie不管值為什么都進入斷點調試,所以擴展程序設不設置都無所謂。

  得出這個結論,我們就可以使用postman進行斷點調試了,需要注意的是除了這個cookie,可能還有其它的請求頭,什么authKey,sessionId等都不要遺漏,不然直接被框架的攔截器給攔截了。

  於是繼續科普了一下調試的原理,當開啟Xdebug擴展以后,發送的請求帶有XDEBUG_SESSION 的cookies時,服務器立馬進入到斷點調試狀態,而本地phpstorm也會開啟一個xdebug服務器,端口即為設置的9000端口,php服務器每執行一段代碼,都會與phpstorm設置的xdebug服務器進行通信,直到進入斷點,才會把內存中所有的執行結果返回給phpstorm的xdebug服務器,接着我們在調試時就看見了變量的值,點擊調試的下一步按鈕,phpstorm的xdebug服務器會發送執行下一行代碼的請求,請求中包含的參數和操作的按鈕有關,有的按鈕是進入下一行,有的按鈕是進入一個方法,還有的是直接執行完。具體的參數值,在這里就不深究了。  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM