端口限制情況下php+xdebug環境配置


PHP程序在開發的時候調試是比較方便的,大體情況下,輸出,打log是可以解決幾乎所有問題。

但是還不夠,有些問題,用打log的形式定位問題是相當痛苦的事情,有些時候測試環境沒配好的話,你可能需要做許多的准備,才能跑一次調試,然后各種log看的頭暈。

Xdebug是一個可以用於PHP斷點調試的強大工具,可以大大縮短定位問題的時間,而且一步步的調試,更容易發現一些,你很難注意到的潛在問題。

 

背景:

1、公司內網,動態ip,有很多的接口權限都是需要對應的網絡策略的,代碼框架並沒有很好的支持生產環境和測試環境的分離,本機調試的話,很難實現,且與服務器上的環境差異比較大,需要在專門的測試機上做調試;

2、測試機無法訪問本地機器,考慮使用ssh鏈接然后端口轉發來解決該問題。(端口轉發之前沒用過,剛好學習下)

 

配置部署:

1、擴展安裝方式和其它的php擴展一樣幾步走,網上的教程很多,這里就不多說了;

2、Php.ini中的配置信息

; zend_extension =/usr/local/php/extensions/xdebug.so  

 

 [xdebug]

 xdebug.default_enable=0

 xdebug.remote_enable=1         ;遠程調試開關,必須開啟

 xdebug.remote_handler=dbgp     ;遠程調試xdebugIDE使用的協議,默認就是dbgp

 xdebug.remote_host=127.0.0.1    ;遠程調試xdebug回連的主機ip,如果開啟了remote_connect_back,則該配置無效

 xdebug.remote_port=9000       ;遠程調試回連的port,默認即為9000,如果有端口沖突,可以修改,對應idedebug配置里面也要同步修改

 xdebug.remote_connect_back=0   ;是否回連,如果開啟該選項,那么xdebug回連的ip會是發起調試請求對應的ip

 xdebug.remote_autostart=1       

 xdebug.idekey=netbeans         ;調試使用的關鍵字,發起IDE上的idekey應該和這里配置的idekey一致,不一致則無效

 xdebug.remote_log=/data/xdebug_log/remote.log

3、重啟apache,打印phpinfo(),可以看見xdebug是否生效和參數情況。

4、這里我們使用SecureCRT來直接做端口轉發的配置:

ISecureCRT連接上安裝了PHP的服務端;

II、選擇:菜單->options->session options->這里有兩個端口轉發;

一個是“port forwarding”監聽本地對應ip:port接受到的信息,轉發到對應服務端的對應ip:port;(ps:這里目標服務器ip可以是ssh鏈接上的服務器網絡環境下能訪問的所有ip

另一個是“Remote/X11”監聽服務端的對應ip:port接受道德信息,轉發到本地服務器的對應端口;(ps:這里的本地服務器的ip也可以是本地網段中的其它ip

這里我們配置Remote/X11->add   名字隨便,默認不配置ip則為localhost

 

5、配置IDE,主要配置為:IDE中的菜單->工具->選項

 

 

還有就是對應項目的配置:右擊對應的項目,打開項目的屬性:

 

 

6、以上配置好了,就可以測試下效果了。

Xdebug遠程調試原理:

這里是官方的原理解釋:https://xdebug.org/docs/remote

英文好的可以訪問官網。這里說明下我的理解,以加深記憶。

 

 

1、xdebug整個工作過程是你本地IDEPHP擴展xdebug共同協作的一個過程;

2、在通常情況下是不會觸發xdebug的遠程調試的。觸發方式為:

I、在命令行的環境下,通過配置環境變量來觸發;

export XDEBUG_CONFIG="idekey=session_name"php myscript.php

 

II、通過http請求的getpost帶對應參數來觸發

XDEBUG_SESSION_START=session_name

這里主要是當php接收到請求的時候xdebug判斷請求參數帶有xdebug_session,則會在cookie上設置idekey=session_name

III、也可以通過xdebug對應的瀏覽器插件,幫忙直接在cookie中設置idekey=session_name

3、這里假設我們的調試為http調試,IDE發起調試的時候,通過瀏覽器訪問請求,例如:http://localhost/test.php?XDEBUG_SESSION_START=session_name,並監聽9000端口;

4、Xdebug截獲到該請求,將設置cookie中idekey=session_name,主動連接remote_ip:remote_port,連接到IDE,跟IDE對話;

對話內容主要為ide告訴xdebug,在哪些文件設置了斷點,在執行第一行代碼時候要停止,進行下一步操作,進入函數,跳出函數等信息

Xdebug則在程序運行到斷點的時候告訴IDE當前在哪里停止和各變量的值等等信息。

 


免責聲明!

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



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