1. 程式人生 > >PHPStorm設定xdebug工具除錯php(使用瀏覽器或不使用瀏覽器兩種方法)

PHPStorm設定xdebug工具除錯php(使用瀏覽器或不使用瀏覽器兩種方法)

PHP 設定除錯工具XDebug PHPStorm IDE - derrck - 部落格園  http://www.cnblogs.com/derrck/p/5195946.html

Xdebug: Documentation  https://xdebug.org/docs/install  

Xdebug: Documentation  https://xdebug.org/docs/remote

1, 按照官方文件所得, 除錯的原理是, 當載入好xdebug工具的php執行php指令碼時, php程序就充當client端(注意瀏覽php網頁, 或手動php 1.php執行指令碼都會建立php程序), 而ide, vdebug, XDebugClient等就充當server端, php程序和這些"server"端就通過一套協議進行通訊除錯資訊.

xdebug是php拓展, 所有前提得配置好本地php環境

Windows7下的php環境配置教程_php技巧_指令碼之家  http://www.jb51.net/article/61507.htm

1, 上文中注意的是, 可能安裝好php後, 終端下執行php --ini, 可以檢視php.ini配置檔案路徑, 假如顯示沒有該檔案, 可以去php安裝目錄下, 按需要把, 把php.ini-development檔案重新命名為php.ini即可


1, phpstorm使用瀏覽器除錯php

都配置好環境後, 可以開始配置xdebug

先下載PHP擴充套件Xdebug https://xdebug.org, 可以複製自己的phpinfo貼上到https://xdebug.org/wizard.php

中, 會自動根據本地php版本生成需要下載的版本, php.ini的設定語句. (注意一定要使用跟自己php版本相對應的xdebug拓展才行)

下載好之後放入php目錄的ext資料夾中, 然後設定php.ini, 在最後加上

下面是windows環境安裝xdebug拓展

zend_extension = C:\path\php\ext\php_xdebug-2.4.0rc4-5.6-vc11-x86_64.dll
xdebug.remote_enable =1
xdebug.remote_handler = dbgp
xdebug.remote_host = localhost  (設定debug時, xdebug拓展(作client端)要連線的遠端server端, 這裡以本機作為client, server端為例)
xdebug.remote_mode = req
xdebug.remote_port = 9000   (設定debug時, xdebug拓展(作client端)要連線的埠. 注意可能會跟nginx, php-cgi程序埠衝突, 本文下方有衝突的解決方法)
xdebug.idekey=PHPSTORM

linux環境的xdebu拓展安裝方法請參照Xdebug: Documentation  https://xdebug.org/docs/install

在電腦屬性中新增系統環境變數, linux上可以用export命令

XDEBUG_CONFIG="idekey=phpstorm remote_host=localhost profiler_enable=1"

然後重啟apache, 去設定phpstorm, 如下圖右方, 配置本地php根路徑

1. 進入File>Settings>PHP>Servers,這裡要填寫伺服器端的相關資訊: 
name: localhost, 
host: localhost, 
port: 80, 
debugger: XDebug

如果是自定域名則host設定自定域名, 如laravel5.io




2. 進入File>Settings>PHP>Debug,找到XDebug選項卡,port填9000 (設定debug時, ide(作server端)要監聽的埠. 注意可能會跟nginx, php-cgi程序埠衝突, 本文下方有衝突的解決方法)



3, 進入File>Settings>PHP>Debug>DBGp Proxy 填寫: 
IDE key: phpStorm 
host: localhost 
port: 80

設定完畢,點OK退出。

下面設定使用瀏覽器除錯php的方法

點選單欄的Run>Edit Configurations… 在彈出的視窗中新增一個除錯配置:

點選左上角加號,選擇PHP Web Application

填寫完畢後,在程式碼裡設定斷點, 再開啟電話icno監聽, 點小甲殼蟲啟動除錯


再下個瀏覽器外掛, xdebug helper, 下載好之後點選項, IDE選PHPSTORM, 不想讓所以網頁顯示小甲蟲, 可以設定domain filter

下載地址:(注意, 本人使用php_xdebug-2.5.0-5.5-vc11-x86_64.dll版本時, 實測哪怕沒有該瀏覽器外掛也是可以除錯的)

Xdebug helper_Xdebug helper外掛_Xdebug helper下載_Xdebug helperchrome_酷容下載 

http://www.mykurong.com/extensions/xdebughelper/#download

基本完事了, 除錯就點開電話圖示監聽, 設定好斷點, 點小甲蟲開啟除錯了, 重新整理頁面可見結果

或者手動在瀏覽器輸入網址, 讓執行自定義php指令碼, 只要在url後加上引數XDEBUG_SESSION_START=整數 即可, 猜測是用於指示php拓展xdebug工作.

如這個格式的url: http://localhost/data/1.php?XDEBUG_SESSION_START=1


埠衝突解決辦法:

注意如果是用瀏覽器除錯, 因為要執行nginx或Apache, 和php-cgi程序, 所有埠上可能與xdebug衝突, 導致報類似下面的錯:

windows下nginx根目錄logs目錄中的error.log日誌檔案可能有

CreateFile() "D:\Software\nginx-1.11.8/html/index.index" failed (2: The system cannot find the file specified), client: 127.0.0.1, server: localhost, request: "GET /index.index HTTP/1.1", host: "localhost"

或者

cmd下執行php-cgi.exe時報

Cannot bind/listen socket - [2] No such file or directory.
Couldn't create FastCGI listen socket on port 127.0.0.1:9000

這可能是因為預設php-cgi和nginx間就是使用9000埠通訊, 所有可能會跟xdebug的埠衝突, 解決辦法是:

1, 工作管理員中結束所有nginx和php-cgi程序

2, nginx.conf配置檔案改成:

        location ~ \.php$ {
            root           html;

            #監聽9001, 非xdebug使用的9000埠即可
            fastcgi_pass   127.0.0.1:9001;    
            fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

3, cmd下, 執行php-cgi.exe  -b 127.0.0.1:9001 -c "D:\Software\php\php.ini"  讓php-cgi程序監聽9001埠跟nginx通訊

4, 雙擊執行或cmd下執行nginx.exe

5, 就可以繼續使用phpstorm在瀏覽器除錯php程式碼了

6, 當然也可以設定成xdebug和ide使用其他埠

2, phpstorm不使用瀏覽器除錯php

如果想用phpstome不通過瀏覽器, 直接除錯php指令碼, 可以在上述步驟基礎上, 繼續:




實測, 可以不開啟"電話"按鈕進行監聽也行.