開發(fā)環(huán)境:
- Windows筆記本:日常開發(fā)使用機(jī)器庇绽,安裝PHPStrom
- Linux遠(yuǎn)程服務(wù)器:安裝php-fpm/nginx等所有開發(fā)依賴環(huán)境,IP: 172.16.0.182
- 【注意】员凝,Windows通過vpn訪問到Linux服務(wù)器晰骑,也就是說Windows->Linux是可以通過IP直接訪問的,而Linux->Windows無法直接連通绊序,因?yàn)閷?duì)Linux而言硕舆,Windows開發(fā)機(jī)的IP只有VPN的網(wǎng)關(guān)地址
- Windows和Linux之前通過PhpStorm的sftp進(jìn)行代碼同步
目標(biāo)
- 遠(yuǎn)程調(diào)試(remote debug):也就是在windows本地調(diào)試遠(yuǎn)程服務(wù)器(Linux)上的代碼
- 日常開發(fā)用Windows中在PhpStorm中設(shè)置斷點(diǎn),可調(diào)試遠(yuǎn)程Linux遠(yuǎn)程服務(wù)器(172.16.0.182)的代碼
過程
-
Linux遠(yuǎn)程服務(wù)器上骤公,PHP安裝Xdebug插件
zend_extension = /home/work/php70/lib/php/extensions/no-debug-non-zts-20151012/xdebug.so xdebug.remote_host=127.0.0.1 ; //注意這里是抚官,客戶端的ip<即IDE的機(jī)器的ip,不是你的web server> xdebug.remote_enable=on xdebug.remote_port = 9001 ;//注意這里是,客戶端的端口<即IDE的機(jī)器的ip,不是你的web server> ;// 由于VPN緣故阶捆,Linux無法直接訪問Windows凌节,需要先指定為Linux本機(jī)的9001端口,再通過ssh端口映射的功能轉(zhuǎn)發(fā)至Windows機(jī)器 xdebug.remote_log = /tmp/xdebug.log
?
-
Windows上配置phpStorm
2.1 SFTP同步遠(yuǎn)程代碼
2.2 設(shè)置PHP-Servers為遠(yuǎn)程Linux服務(wù)器洒试,調(diào)試模式為Xdebug
2.3 新建調(diào)試配置:Run-> Edit Debug Configuration
-
Windows上開啟Xshell端口映射(隧道->TCP/IP轉(zhuǎn)移)
將Linux的9001端口請(qǐng)求轉(zhuǎn)發(fā)至Windows的9001端口上倍奢,這里通過Xshell的隧道方式實(shí)現(xiàn):類型選擇Remote(Incomming)
xshell-tunnel.png
在xshell中通過ssh連接Linux遠(yuǎn)程服務(wù)器后,查看->隧道窗格->轉(zhuǎn)移規(guī)則垒棋,可見遠(yuǎn)程9001已和本地的9001建立連接
-
Windows開啟調(diào)試卒煞,訪問遠(yuǎn)程服務(wù)器代碼的url:http://172.16.0.182:8088/
選擇新建的Xdebug配置項(xiàng)
-
點(diǎn)擊綠蟲子調(diào)試按鈕(Shift+F9)開啟調(diào)試
start-debug.png -
點(diǎn)擊調(diào)試按鈕后,會(huì)自動(dòng)打開瀏覽器訪問:http://172.16.0.182:8088/?XDEBUG_SESSION_START=17461
這里
XDEBUG_SESSION_START=17461
會(huì)在cookie中設(shè)置XDEBUG_SESSION=17461
叼架,而phpStorm一直在監(jiān)聽17461的idekey來訪問畔裕,如下圖:
訪問到斷點(diǎn)時(shí)會(huì)進(jìn)入ide的debug模式,Enjoy~
注意事項(xiàng)
- 此例中只通過任意的idekey和phpStorm的調(diào)試按鈕來協(xié)調(diào)開始調(diào)試模式乖订,而不是一些教程中設(shè)置特定的idekey=PHPSTORM和瀏覽器插件(Xdebug Helper)來啟動(dòng)調(diào)試扮饶,后者在筆者環(huán)境下未成功,望知曉
- 本案例中特殊之處在于vpn訪問的特殊網(wǎng)絡(luò)結(jié)構(gòu)乍构,單向通信容易甜无,逆向則需要借助端口轉(zhuǎn)發(fā)工具
- 為避免調(diào)試過程中Nginx返回502超時(shí),需要修改php-fpm和nginx設(shè)置哥遮,如下:
// 修改php-fpm.conf配置
; The timeout for serving a single request after which the worker process will
; be killed. This option should be used when the 'max_execution_time' ini option
; does not stop script execution for some reason. A value of '0' means 'off'.
; Available units: s(econds)(default), m(inutes), h(ours), or d(ays)
; Default Value: 0
;request_terminate_timeout = 0
request_terminate_timeout = 300 //這里用0或設(shè)置5分鐘
// 修改nginx中fastcgi超時(shí)時(shí)間
fastcgi_read_timeout 7200s; // 設(shè)置fastcgi_read表示nginx從php-fpm讀取返回?cái)?shù)據(jù)的時(shí)間
參考文檔:
- http://www.thinkphp.cn/topic/46349.html
- http://www.cnblogs.com/yjken/p/6555438.html
- http://www.cnblogs.com/jice/p/5064838.html
- https://xdebug.org/docs/remote
- https://confluence.jetbrains.com/plugins/servlet/mobile#content/view/50497722
- https://confluence.jetbrains.com/display/PhpStorm/Troubleshooting+PhpStorm+debugging
- https://intellij-support.jetbrains.com/hc/en-us/community/posts/205972064-PHPSTORM-not-receiving-debug-connection-from-xdebug-2-5
- https://stackoverflow.com/questions/8049776/xdebug-for-remote-server-not-connecting
- https://stackoverflow.com/questions/2374567/eclipse-xdebug-session-never-completes