前言
最近審計php代碼發現手動打印變量實在是太累了,不能快速的瞭解目標應用程序的運行邏輯。還是決定轉戰xdebug,下面是一些簡單的記錄…真香
docker環境獲取
爲什麼用docker來搭建調試環境呢?一是本地搭建比較麻煩,二是沒有docker便攜,放在docker裏,更加靈活。docker環境可以直接到dockerhub上去找一個,我用的下面這個
https://hub.docker.com/r/tommylau/xdebug
上面這個環境,集成了php+apache+xdebug,配置也是沒啥大問題的,網上很多教程都說安裝好xdebug還需要在php.ini裏進行配置,但是這個環境的配置文件在/usr/local/etc/php/conf.d/ext-xdebug.ini
,內容如下
zend_extension=xdebug.so
xdebug.remote_enable=1
xdebug.remote_autostart=0
xdebug.remote_connect_back=1
xdebug.remote_port=9000
這個配置文件我們後面還需要稍微改一下
phpstorm遠程調試環境配置
在調試之前,我們需要先把web應用部署到docker中去
docker run --name xdebug -v /path/to/web:/var/www/html -p 80:80 -d tommylau/xdebug
運行上述命令,可以把本地的web目錄掛載到docker的web目錄中。如果需要連接宿主機的數據庫,那麼只需要在數據庫連接配置時指定數據庫ip爲宿主機的ip就行(當然,首先要保證你使用的用戶支持遠程連接)
如果要使root用戶支持遠程主機連接,可以執行以下命令:
grant all privileges on . to ‘root’@’%’ identified by ‘密碼’ with grant option;
flush privileges;
如果要連接其他docker中的數據庫,網上有教程,就不詳述了。
接下來我們開始配置phpstorm吧
- 在settings>build,Execution,Deployment>Deployment 點擊+號新建一個deployment,由於我們這裏使用的是docker掛載目錄的方式,所以type選擇選擇
in place
也沒啥問題,web server url選擇項目的在服務器上的路徑(url)
- 然後選擇Mappings選項,設置映射
- 在settings>Languages&Frameworks > php中設置php解釋器
- 展開php這一欄,選中debug欄,設置一下監聽端口,這處的端口可不是隨便填的,需要和docker裏xdebug配置的那個端口一致
- 展開debug欄,選中DBGp Proxy,IDE key比較關鍵,這就涉及到我們服務端xdebug的設置了,xdebug的設置修改爲下面這樣
zend_extension=xdebug.so
xdebug.idekey="PHPSTORM"
xdebug.remote_enable=1
xdebug.remote_autostart=0
xdebug.remote_connect_back=1
xdebug.remote_port=9000
也就是添加了一行xdebug.idekey="PHPSTORM"
,所以phpstorm中配置的ide key需要和服務器上的xdebug配置文件中的idekey一致,至於host和port就是服務器的host:port
- 然後再選中servers欄,點擊+號創建一個server, host port就是web服務器地址,debugger選擇Xdebug,然後這裏需要勾選path mappings,並且正確設置目錄映射,否則調試的時候,會出現cannot find a local file的錯誤,類似下面這樣
-
最後,需要編輯一下deubg 的配置
創建一個php web page,然後server選擇我們剛剛創建的xdebug, 設置一下需要調試項目的url
-
設置的差不多了,我們在run > web server debug validation欄檢查設置是否正確,記得選中remote web server, deployment server就是我們剛剛創建的deployment, 出現如下現象則表示設置正確
現在就可以debug剛剛創建的 php web page了,點擊右上角那個小蟲子就行,這是可能出現如下問題
cannot find a local copy of the file .....
,這時候點擊click to set up path mappings
會彈出一個框,然後選中那個複選框就行
接下來就可以愉快的調試了
參考
https://segmentfault.com/a/1190000011907425