參見:官方文檔php
1 - Browser 使用 HTTP 向 Server 的 80 端口發送請求 2 - Nginx 監聽到 80 端口的調試請求 3 - Nginx 將請求流轉到 PHP 4 - PHP 將調試請求轉發給 Xdebug 5 - Xdebug 向 Client 的 9000 端口響應請求(Xdebug 讀取配置信息肯定響應的端口) 6 - Phpsstorm 監聽 9000 端口的響應(故 Client 監聽端口要與 Xdebug 的配置一致) 7 - Phpsstorm 確認要斷點調試到的位置,響應給 Xdebug 8 - Xdebug 通知 PHP 執行到斷點位置 9 - PHP 將執行後的信息流轉給 Nginx 10 - Nginx 將信息響應給 Browser 11 - Browser 顯示執行結果
官方文檔裏的流程圖
html
Xdebug下載頁面web
這裏介紹 Windows 的 Xdebug 安裝
source (SHA256: dae691d6c052073b886e0c6e1306a707bca9fd18a1e3485384ef6c4aacf1bd77) Windows binaries: PHP 7.0 VC14 (64 bit) (SHA256: a7b7ebcaaabb6840751c83411fb3e787d04be6e75e95df96b3ba88a581215b2d) PHP 7.0 VC14 (32 bit) (SHA256: b108c1e09fce65fdeafa79687ba3ce4e08d7e6861cac6b90e5546d46ab250a45) PHP 7.0 VC14 TS (64 bit) (SHA256: 4d61ffb7d4b8def2f1f8f9f08695048fc03844477719939f712f8ba53f646712) PHP 7.0 VC14 TS (32 bit) (SHA256: 7812579264b3eae5668b05024997f7b7fce5d6abf00a3b019563c7f779697dff) PHP 7.1 VC14 (64 bit) (SHA256: 8e4d46c322fab7a40362730647010f3cb52027a05bb70da3d1a3a08436c96a22) PHP 7.1 VC14 (32 bit) (SHA256: d1c14fc4227166de4834db102677da875c039e50a197654d304d6a407bdcca4f) PHP 7.1 VC14 TS (64 bit) (SHA256: b2adba0a07ae3d6038d25c50a85484b98bae95df3c533d5f2607484d91b12e03) PHP 7.1 VC14 TS (32 bit) (SHA256: 8c0cfa8cb74695361f0230b1d6bef4bbba01c089c17efcb4d108d7beba7462e1) PHP 7.2 VC15 (64 bit) (SHA256: d589baece219d3bc3963dcdd9fc475294767328b0d2552cec7e2363146870dae) PHP 7.2 VC15 (32 bit) (SHA256: dd5872cf7bb5fabeb3c8c7e77a8bb2cef314705147a40decacd772c6f840b778) PHP 7.2 VC15 TS (64 bit) (SHA256: ae18f7659f55e7bfcf42c782d1cfa11373524630c182de5b882f9e37e8791385) PHP 7.2 VC15 TS (32 bit) (SHA256: ddedf1d0cea0e9fd36c49ba01c6afbea60d1299b3f86bba9cdf057b53ce2bee5)
根據 phpinfo 給出的信息選取 「32 bit 或 64 bit」 以及「TS 或 NTS」vim
System Linux centos7 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 ... PHP Extension Build API20160303,NTS
這裏須要注意的是: Windows 環境下使用 PHPStudy 的系統版本都是 32 bitsegmentfault
System Windows NT SEA 10.0 build 16299 (Windows 10) i586 ... Architecture x86 ... PHP Extension Build API20151012,NTS,VC14
編輯 php.inicentos
[XDebug] zend_extension = "D:\EXE\phpStudy\php\php-7.0.12-nts\ext\php_xdebug.dll"
這裏介紹 Linux 的 Xdebug 安裝
在官方自動選擇 Xdebug 界面輸入 phpinfo() 輸出的信息,會給出適合當前 php 的 Xdebug 版本設計模式
根據官方提示進行安裝便可服務器
[root@localhost ~]# wget http://pecl.php.net/get/xdebug-2.6.1.tgz [root@localhost ~]# tar -xvzf xdebug-2.6.1.tgz [root@localhost ~]# phpize [root@localhost ~]# ./configure --with-php-config=/usr/local/php/bin/php-config [root@localhost ~]# make && make install [root@localhost ~]# vim /usr/local/php/etc/php.ini
添加 Xdebug 拓展cookie
# zend_extension = xdebug.so
針對的是: Windowssession
# 查看端口狀態 netstat -ano #查看指定端口狀態 netstat -ano | findstr 9000 # TCP 127.0.0.1:9000 0.0.0.0:0 LISTENING 4144 # TCP 127.0.0.1:9000 0.0.0.0:0 LISTENING 5268 # TCP 127.0.0.1:9000 0.0.0.0:0 LISTENING 4300 # TCP 127.0.0.1:9000 0.0.0.0:0 LISTENING 5476 #找到進程號對應的進程名稱 tasklist | findstr 4144 #根據進程名稱終止進程 taskkill /f /t /im /php-cgi.exe #也能夠直接去任務管理器根據PID終止進程
[xdebug] zend_extension="D:\EXE\phpStudy\php\php-7.0.12-nts\ext\php_xdebug.dll" # 引入Xdebug拓展 xdebug.auto_trace= On # 是否開啓自動跟蹤 xdebug.show_exception_trace= On # 是否開啓異常跟蹤 xdebug.remote_autostart= On # 是否開啓遠程調試自動啓動 xdebug.remote_enable = On # 是否開啓遠程調試 xdebug_remote_host = "127.0.0.1" # 配置遠程調試主機IP xdebug.extended_info=On # 是否開啓調試擴展信息 xdebug.profiler_enable = On # 是否開啓調試內容 xdebug.profiler_output_dir = "c:/wamp/tmp" # 調試輸出路徑 xdebug.remote_handler = dbgp # 多人調試指定dbgp代理 xdebug.remote_port = 9001 # 遠程調試的端口 xdebug.idekey = phpStorm # 多人調試模式在代理服務器標識IDE xdebug.collect_vars= On # 是否收集變量 xdebug.collect_return= On # 是否收集返回值 xdebug.collect_params= On # 是否收集參數 xdebug.trace_output_dir="c:/wamp/tmp" # 跟蹤輸出路徑
1. 開啓監聽調試請求的按鈕,監聽到具備「XDEBUG_SESSION」的變進入調試狀態 2. 開啓配置好的配置信息,監聽符合配置設置要求的調試請求
1. [PHP Web Page] :不須要設置「IDE Key」每次調試都會自動生成「XDEBUG_SESSION_STAR」及其的隨機數值 2. [PHP Remote Debug]:配置了「IDE Key」調試時經過「IDE Key」來鑑定身份判斷是否開啓調試
要開始調試,首先須要在服務器上激活調試器。
If you want to debug a script started through a web browser, simply add XDEBUG_SESSION_START=session_name as parameter to the URL. Instead of using a GET parameter, you can also set XDEBUG_SESSION_START as a POST parameter, or through a cookie named XDEBUG_SESSION.
鏈接調試器有多種方式:
1. 「GET」 方式:在「URL」後追加「 XDEBUG_SESSION_START = session_name」 2. 「POST」 方式:在「POST」請求中添加「XDEBUG_SESSION_START = session_name」參數 3. 「COOKIE」方式:將「XDEBUG_SESSION = session_name」設爲「COOKIE」 # 在開啓用監聽調試請求時鏈接調試器依據「XDEBUG_SESSION」是否存在,不關心其值
使用「Xdebug Helper」插件能夠很方便地實現設置「COOKIE」方式鏈接調試器
與監聽調試請求(Listening for PHP Debug Connections)不一樣,遠程調試(PHP Remote Debug)要求「XDEBUG_SESSION」的值與配置遠程調試(PHP Remote Debug)時設置的「IDE Key(session id)」一致
即項目架設在本地,Xdebug 與 IDE 在同一個環境中
[XDebug] zend_extension = "D:\EXE\phpStudy\php\php-7.0.12-nts\ext\php_xdebug.dll" xdebug.remote_enable = on xdebug.remote_port = 9001 xdebug.remote_host = 127.0.0.1 xdebug.remote_handler = dbgp
即項目部署在遠程,Xdebug,PHP 在服務器上, IDE,Browser 在本地
[XDebug] zend_extension = xdebug.so xdebug.remote_enable = on xdebug.remote_port = 9001 xdebug.remote_host = 192.168.1.4 xdebug.remote_handler = dbgp
配置要本地與遠程的代碼映射關係才能使本地打的斷點正確地在遠程執行
使用 Host: www.vmshop.com 才能讓 Nginx 解析到正確的項目根路徑.
官方文檔裏的流程圖:
因爲 Xdebug 的 xdebug.remote_host 限制了調試人數,下載 DBGp 代理實現多用戶調試
[XDebug] zend_extension = xdebug.so xdebug.remote_enable = on xdebug.remote_port = 9002 xdebug.remote_host = 127.0.0.1
[root@centos7 ~]# ./pydbgpproxy -i 0.0.0.0:9001 -d 9002 # INFO: dbgp.proxy: starting proxy listeners. appid: 24399 # INFO: dbgp.proxy: dbgp listener on 127.0.0.1:9002 # INFO: dbgp.proxy: IDE listener on 0.0.0.0:9001 # INFO: dbgp.proxy: Server:onConnect ('192.168.108.1', 9572) [proxyinit -p 9001 -k jiong -m 1]
關於: ImportError: No module named dbgp.serverBase 的解決方法
在 PhpStorm 的導航欄上找到 DBGp Proxy 進行 Register IDE 便可
# 註冊成功或失敗 IDE 的 Event Log 都會有相應的提示記錄 1:15 Xdebug proxy: IDE successfully registered with ide key 'jiong' 1:19 Xdebug proxy: IDE Key already exists
[XDebug] zend_extension = xdebug.so xdebug.remote_enable = on xdebug.remote_port = 9001 xdebug.remote_connect_back = 1 xdebug.remote_handler = dbgp
配置好路徑映射正確的「Servers」,開啓監聽調試便可
PHP 規範開發(一):斷點調試
PHP 規範開發(二):單元測試
PHP 規範開發(三):版本控制與協做開發
PHP 規範開發(四):重構、代碼規範及設計模式