调试复杂些的项目代码,Xdebug 是一把利器,本文结合自己的开发环境简讲通过PhpStorm完成Xdebug调试,部分原理图借鉴xxlegend作者

环境介绍

本机:Windows10 + PhpStorm 2018 + Ip 192.168.10.108

开发机:CentOS 6.10 + PHP 7.1 + Nginx 1.14 + Ip 192.168.10.140

开发方式

一般情况开发者都是在本地开发,使用的开发环境也是本地自己搭建的,无论是在WinMacLinux三者哪一个平台开发,最终想达到的体验是尽可能和生产环境一致,如果是在Win下开发,带来的代码兼容性问题时长让人难受(如:大小写问题),以至于追求Unix开发是一种潮流,这可能便是Mac之所以时程序员所爱的原因吧,Win下要想到达此效果。

  1. 通过在Window下安装虚拟机,虚拟机中安装Linxu系统;
  2. 使用Windows 10已经支持开启子系统,Ubuntu子系统中安装PHP开发环境;
  3. 使用公司提供的公共开发机,开发机环境和所需服务都是安装好的,通过samba共享目录方式,本机无环境,开发机创建一个自己的虚拟目录;
  • 方法一:没有配置上SSD,内存没到4G 慎用
  • 方法二:Windows 10 开启子系统,在应用市场一键安装Ubuntu,还是很方便的,在子系统中可以直接访问宿主机(本机)目录,使用感很方便。
  • 方法三:我公司为了开发者方便,搭建了IP140的开发机,通过samba创建虚拟目录,本地添加网络盘方式打开140自己Home开发目录;

目录介绍

1
2
开发机(140)项目目录`/home/dingbing/zhifu`
本机目录`Z:\zhifu`

本机通过挂载网络盘方式,访问到开发机/home/dingbing/zhifu

Xdebug 原理介绍

工作方式

xdebug

客户端(浏览器)发起请求,服务器Apache(或Nginx等),接收请求根据服务端配置规则如果是.php转交PHP,如果携带调试信息?XDEBUG_SESSION_START=10003参数,并且PHP引擎安装且开启了XdebugXdebug把信息转发给IDE,从而完成断点调试。

通信设置

使用静态IP/单个开发人员

{% asset_img [class names] dbgp-setup.gif [width] [height] [title text [alt text]] %}

  1. 服务器的IP是10.0.1.2,端口是HTTP
  2. IDE在IP 10.0.1.42上,因此xdebug。remote_host被设置为10.0.1.42
  3. IDE监听端口9000,所以是xdebug。remote_port被设置为9000
  4. HTTP请求在运行IDE的机器上启动
  5. Xdebug连接到10.0.1.42:9000
  6. 调试运行,提供HTTP响应

安装并调试

安装 Xdebug

这里平台不一样,安装方式也不一样,LinuxWindow 平台会稍有不同,PHP 版本不一样,对应安装的Xdebug版本也不一样,安装方式这里暂时不总结了。

Linux 下编译后,将.so文件引入到php.ini Window下,将对应的xdebug.dll库文件引入到php.ini

官方下载地址 https://xdebug.org/download.php 安装后我的(CentOS)php.ini配置清单

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
[XDebug]
xdebug.idekey=PHPSTORM
xdebug.remote_mode=req

;xdebug.remote_connect_back = 1
;//注意:如果开启此,将忽略下面的 xdebug.remote_host 的参数

xdebug.remote_host=192.168.10.117
;//注意:客户端的IP<即IDE的机器的ip>

xdebug.remote_enable=1
xdebug.remote_port=9009
;//注意:客户端的端口<与IDE的Xdebug端口一致,此端口不能被其他程序占用>

xdebug.remote_handler=dbgp
xdebug.auto_trace = 1
;xdebug.remote_log = /tmp/xdebug.log

zend_extension=/www/server/php/71/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so

配置项解释:https://xdebug.org/docs/remote

配置 Debug

步骤 File->Setting->Languages & Frameworks->PHP->Debug

注意IDE Xdebug port端口要和php.ini配置保持一致。

xdebug

配置 Servers

步骤 File->Setting->Languages & Frameworks->PHP->Servers

xdebug_set_1

xdebug

配置 Debug Configuer

步骤 Run->Edit Configurations->Add New Configuration

xdebug

调试

  1. 打断点
  2. 点击右上角小虫子图标,开启调试

xdebug

  1. 如果看到如下图,那么恭喜你,已经成功开启了断点调试

xdebug

补充

Q:开启Debug后,1分钟后调试自动终止了。 A:是因为PHP脚本默认超时时间是 1分钟,设置PHP 超时时间为1小时、或2小时,

设置方式:

  1. Nginx、php-fpm 情况,修改 php-fpm.conf 文件request_terminate_timeout = 7200
  2. apache Module 情况,修改 httpd/conf.d/fcgid.conf 文件 FcgidIOTimeout 7200

END :-)

参考地址