PHP
程序報錯,肉眼review了多少遍都以爲本身的寫得沒問題;有個switch代碼分支判斷,爲何進不了我想要的case
; 調試PHP
代碼還在用 var_dump($re); die();
。試試Xdebug
斷點調試吧。php
開啓Debug監聽,一步步順着代碼走進程序的最深處。你會了解到真實的代碼運行步驟,以及調用關係。你還能知道每一個變量在程序運行時,值的多少,以及變化。同時避免了 var_dump
代碼植入,(若是忘了刪除,提交到線上,那這個恥辱柱會狠狠地釘在你身上)html
好的來介紹下咱們的這期主角 Xdebug前端
Xdebug是一個PHP擴展,提供了調試和性能分析功能。[1]它使用DBGp調試協議。mysql
Xdebug能夠提供的調試信息包括如下內容:git
Xdebug還提供:github
以上摘自 wiki
這篇文章主要圍繞Docker環境下PHP的Xdebug調試展開。sql
先說下筆者演示環境:Mac環境,安裝Virtual Box,跑了一個Ubuntu虛擬機,再裝了Docker ce軟件。看到這,大夥兒先別急着關網頁啊,個人環境估計有些奇葩,但大體流程是差很少的。docker
這套PHP Docker
環境這篇文章有詳細介紹: [Docker快速搭建一套PHP、Nginx、MySQL、Redis、Xdebug、Memcached 開發環境shell
Xdebug 官方文檔已介紹。segmentfault
$ pecl install xdebug
*.dll
放入到拓展目錄便可。$ php -v // 查看 PHP 版本
對於網絡不那麼暢通,pecl不能用時。
## 獲取源碼 $ git clone https://github.com/xdebug/xdebug.git ## 進入目錄 $ cd xdebug ## php檢查 $ phpize ## 編譯前配置,通常來講 phpize 已經準備好了大部分工做,以及配置 $ ./configure ## 編譯 $ make ## 測試並安裝 $ make test && make install
Docker 環境下提供了兩種方式,第一種是經過pecl在線下載安裝,受限於網絡情況,大概了下會失敗。
那麼能夠嘗試經過其餘途徑下載好pecl-Xdebug的壓縮包,Add到docker容器中安裝。
FROM php:7.3-fpm-buster ... # 方法1 pecl 安裝 RUN yes | pecl install xdebug \ && echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name xdebug.so)" > /usr/local/etc/php/conf.d/xdebug.ini \ && echo "xdebug.remote_enable=on" >> /usr/local/etc/php/conf.d/xdebug.ini \ && echo "xdebug.remote_autostart=off" >> /usr/local/etc/php/conf.d/xdebug.ini ## ------------------------------------------------ # 方法2 下載安裝 xdebug ADD ./xdebug-2.6.1.tgz /tmp/php7-xdebug RUN cd /tmp/php7-xdebug/xdebug-2.6.1/ && phpize && ./configure && \ make && make install
找到咱們的配置文件.
## 文件: /etc/php/conf.d/xdebug.ini zend_extension=xdebug.so // 啓用xdebug拓展! xdebug.remote_connect_back=1 xdebug.remote_enable = 1 // 啓用遠程調試 xdebug.remote_mode = "req" xdebug.remote_handler = "dbgp" xdebug.remote_host = "10.0.2.2" // 這是你PHPStorm運行環境的IP地址 xdebug.remote_port = 9000 // 默認9000,最好別動 xdebug.idekey="PHPSTORM" // PHPStormIDE用的默認值 xdebug.remote_autostart = 1
關於這個 xdebug.remote_host
這個ip,不是想固然就填個 127.0.0.1
, 你要看看你PHPStorm所運行的環境,和PHP運行環境是否在一個環境,若是是,你填 127.0.0.1
是沒問題。是Docker那麼就確定不在一個環境了,怎麼看咱們IDE所處環境的IP呢,先編輯下入口文件 index.php
, 獲取SERVER
變量的 REMOTE_ADDR
屬性。
## 文件: ~/public/index.php <?php print_r($_SERVER['REMOTE_ADDR']);die();
打開瀏覽器訪問下php-fpm服務。這裏是多少,xdebug.remote_host
就填多少。
Docker環境下,要用IDE去debug代碼,IDE還須要和Docker打交道。就是在PHPStorm配置好Dcoker的API入口。
這個你們能夠參考這片文章 Docker開啓Remote API 訪問 2375端口 來配置下Docker環境。
轉載註明出處
以上準備好了後,就開始咱們的重頭戲,配置PHPStorm
.
1.將Docker Remote API
配置在PHPStorm上.
因爲個人環境裝了Vbox,用了NAT,因此端口是42376,你要本身的環境配置爲準。
下面的 Connection Successful
就表示配置成功了。這裏的 Name:
名字要記下來,後面要用。
2.新增PHP Cli Interpreter
.
搜索: php language,點擊最右側 ···
按鈕
選擇 From Dcoker...
這裏的 Server:
名字選擇 第 1 步
的 Dcoker Server 的名字。 Image name:
選擇你的php容器。
點擊確認後,PHPStorm會檢查 PHP容器的版本,Xdebug拓展是否啓用。有以下提示,沒有報錯,則表示環境無誤,可進行下一步。
留意下紅框裏面的
PHP version:
這裏就是配置好以後的展現效果,PHP language level:
最好和 PHP 容器內一致.
3.配置 Deployment
這個配置是用來讓IDE知道PHP代碼運行環境,以及本地PHP代碼之間的目錄映射關係。
這裏選擇 Local or mounted flolder
,首先會讓你輸入 New server name:
。
我輸入的是
bs
。你也能夠輸入別的,但都要記錄下來,後面會用到這個名字。
這裏Folder:
配置PHPStorm運行環境的文件路徑。(也就是Mac下文件路徑。)
這裏咱們查看下 PHP 容器內代碼路徑.
切到 Deployemnt
配置的 Mapping
Tab,在 Deploment path:
填上容器內代碼路徑, Local path:
選擇本地環境代碼路徑。
4.配置PHP > Server
, 這裏點擊圓圈內的 導入 按鈕。在彈框中選擇剛剛新增的 Deployment
配置。(就是剛剛輸入的 New server name
)
File/Direcotry
你檢查下,通常都沒問題。Absolute path on the server
是你代碼運行的Docker容器內的根目錄。調整好以後,點擊 OK
.
先別急,關閉彈框後,再確認下 Absolute path on the server
。
這裏估計是 PHPStorm 的一個Bug 仍是產品的需求,彈框裏外都要配置一次纔好。
好PHPStorm的配置就完成了。
別急
Docker 運行時容器內,還需配置兩個環境變量 PHP_IDE_CONFIG
, XDEBUG_CONFIG
.
serverName
寫 Deployment
配置的名字。remote_host
填PHPStorm環境的IP,也就是PHP中 $_SERVER['REMOTE_ADDR']
的值。remote_port
默認 900.docker-compose.yaml
配置文件中的 php 容器新增環境變量:## 文件: ~/docker-compose.yaml version: "2" services: php: image: paulxu/php:5.6-fpm-jessis-pdo-xdebug-mysqli-gd-mb-zip-2 volumes: ... ports: ... environment: PHP_IDE_CONFIG: "serverName=bs" XDEBUG_CONFIG: "remote_host=10.0.2.2 remote_port=9000"
docker run
拉起的容器,加上以下參數$ docker run ... --env PHP_IDE_CONFIG="serverName=dealman" --env PHP_IDE_CONFIG="serverName=bs" ... php /bin/bash
1.啓用Xdebug listening,點擊如下紅色電話。
如今就是開始偵聽狀態。
2.找到入口文件 ~/index.php
,選擇第一行代碼,打一個斷點,(不知道點哪,按Commond+F8)
3.開始訪問Web站點。
這裏第一個斷點是紅色箭頭處,經過點擊綠色按鈕 Step over
,代碼一步步執行到了藍色箭頭處,這行代碼也被IDE藍色高亮標底,此時還能從 Variables
看到 已定義變量 $conf
的值。
之前的大佬還在炫耀用notepad手撕代碼,一遍過。在愈來愈快的開發節奏中,使用高級的工具,以及詳盡的儀表盤來開發調試代碼。但願你們看了,都能配置成功。
有問題歡迎提問。
vscode用xdebug調試php多進程程序
Mac下基於Docker在PhpStorm中配置Xdebug
使用 Xdebug 在 PHPStorm 中調試 PHP 程序(框架/原生均適用)