PhpStorm 配置 Xdebug 代码审计环境
参考文章:
之前一直想配置一个
PHP的代码审计环境,但是又不常用。最近刚好有培训要用到这块,整理一下内容方便后续上课使用(坑是真的多,淦)。
1 CentOS 7 + BT + Xdebug
有的伙伴会有疑问,为什么要使用宝塔,而不是像
PhpStudy、LNMP等环境工具。其实理由非常简单,宝塔的几乎个个版本都封装了
Xdebug,这就让安装的过程就变得很简单。其次,
Xdebug官网对于Linux只提供了源码安装,编译过程很容易失败~~(失败了 N 次)~~。
1.1 CentOS 7 + BT 安装
之前有写过
Ubuntu18.04和宝塔的安装文章,CentOS和Ubuntu大同小异,具体可以看:Linux 安装宝塔面板。为什么不选
Ubuntu?因为CentOS7对于宝塔的兼容性是最好的QAQ。为了后续使用方便,修改一下宝塔面板的账号密码:
[root@localhost ~]# bt
===============宝塔面板命令行==================
......
===============================================
请输入命令编号:6
===============================================
正在执行(6)...
===============================================
请输入新的面板用户名(≥3位):yongz
|-新用户名: yongz
[root@localhost ~]# bt
===============宝塔面板命令行==================
......
===============================================
请输入命令编号:5
===============================================
正在执行(5)...
===============================================
请输入新的面板密码:Goktech@123
|-用户名: yongz
|-新密码: Goktech@123
在安装中间件时,这里我们选择
LAMP(Apache + MySQL + PHP):

1.2 Xdebug 安装
1.2.1 Xdebug 介绍
Xdebug是一个用于PHP调试和性能分析的开源工具。它提供了一组功能强大的功能,有助于开发人员调试和分析他们的PHP应用程序。下面是
Xdebug的一些主要特性:代码调试:
Xdebug允许开发人员在PHP代码中设置断点并逐行执行代码。它提供了单步调试、条件断点、函数追踪和堆栈跟踪等功能,帮助开发人员定位和解决代码中的错误。错误报告:
Xdebug生成更详细和有用的错误报告,包括堆栈跟踪信息、变量值和表达式求值结果。这有助于开发人员更快地发现和修复代码中的错误。性能分析:
Xdebug可以生成性能分析报告,显示PHP应用程序中每个函数的执行时间和内存消耗等信息。这有助于开发人员找出应用程序中的瓶颈,并进行性能优化。远程调试:
Xdebug支持远程调试,允许开发人员通过网络连接到远程服务器上运行的PHP应用程序,并进行调试操作。这对于调试生产环境中的问题非常有用。代码覆盖率:
Xdebug可以生成代码覆盖率报告,显示哪些代码行被执行过,哪些代码行没有执行到。这对于测试代码覆盖率非常有用。
官网地址:https://xdebug.org/
1.2.2 Xdebug 扩展
点击左下角软件商店:

在应用搜索中搜索
PHP,找到之前安装的版本,点击设置:

点击安装扩展:

找到
Xdebug扩展,点击安装:

点击服务,点击重载配置:

查看
Xdebug插件安装情况,点击左下方phpinfo:

1.2.3 Xdebug 测试网站
点击左上方网站:

点击添加站点:

简单输入自己想要的域名即可:

由于网站是搭建在
CentOS7虚拟机中,物理主机无法访问,需要在本地配置hosts文件的域名映射:
10.10.8.137 www.test.com
尝试访问该域名:

访问成功,说明配置无误。
现在需要修改网站目录下的文件,编写一个
phpinfo文件,点击文件:

点击进刚配置的网站根目录,将配置文件全部清除:

新建一个
php文件,写入phpinfo:

访问一下:

这里就出现了问题,找不到
Xdebug加载结果:

所以这里不得不做出一个选择了,切换
PHP版本,经过多次尝试结果如下(截至2023.10.23):
经过漫长的实验,安装了如下
PHP:PHP 7.4PHP 7.2PHP 5.4

1.2.4 php.ini 配置
分别切换
PHP 7.2和PHP 5.4查看phpinfo信息:


我们可以发现,这俩
PHP中的Xdebug插件版本是不一样的,意味着后续我们写入php.ini的配置也是不一样的。
注:
Xdebug 2 是较旧的版本,是在 Xdebug 的开发历史中的前一个主要版本。它提供了许多强大的调试功能,如代码跟踪、断点设置、变量查看、性能分析等。Xdebug 2 可以与 PHP 5.x 和较早的版本兼容。
Xdebug 3 是 Xdebug 的最新版本(PHP 7.x 或更新版本),于 2020 年发布。Xdebug 3 引入了一些重要的改进和新功能。
1.2.4.1 Xdebug 3
例如现在我使用的是
PHP 7.2版本,需要在配置文件末尾添加如下字段:
[xdebug]
; 远程调试端口
xdebug.client_host=10.10.8.1
; 远程调试地址
xdebug.client_port=9000
; 开启 debug 模式
xdebug.mode=debug
; key 值
xdebug.idekey="PHPSTORM"

重载一下
PHP配置:

1.2.4.2 Xdebug 2
同
Xdebug 3配置即可:
[xdebug]
; 开启远程调试功能
xdebug.remote_enable=On
; 远程调试地址
xdebug.remote_host=10.10.8.1
; 远程调试端口
xdebug.remote_port=9000
; 指定与调试客户端通信时使用的远程处理程序
xdebug.remote_handler=dbgp
; key 值
xdebug.idekey="PHPSTORM"
2 PhpStorm
注:
千万千万不要用最新版的 PhpStorm(2023.2)会出现各种意外,导致连不上。
这里使用的 PhpStorm 版本为:2021.1.4。
2.1 预配置
现在本地创建一个同步的目录:

点击设置,找到
PHP服务器,进行如下配置:

2.1.1 验证 Web 服务器上的调试器配置
点击调试,选中验证:

选中远程
Web服务器,脚本路径选择之前创建的目录,在部署服务器之前还需要进行SFTP连接:

配置一个
SSH:

由于本地配置了域名解析,可以直接通过域名连接:

配置一下根路径,选择宝塔网站根目录即可,
Web服务器直接填写域名:

本地路径选择之前创建的目录,部署路径直接
/即可:

配置完成了,验证一下:

全部打勾说明配置成功。
2.1.2 安装浏览器工具栏或小书签
验证完之后点击浏览器工具栏或小书签:

点击对应浏览器插件进行下载:

点击添加:

安装完成便可使用:

2.1.3 启用 PHP 调试连接侦听
点击上方添加配置,选择
PHP远程调试:

取个名称,点击确定:

2.1.3.1 SFTP 文件同步
为了同步本地和服务器的配置,需要配置一个自动同步:

配置自动覆盖:

简单使用,同步服务器文件:


2.1.4 使用工具栏或者小书签在浏览器中启动调试会话
代码调试,点击上方调试按钮:

点击
Debug:

刷新页面:

查看
Debuger,发现一个报错,尚未添加文件映射,添加以下:


2.2 测试
编辑一串代码:

GET方式传参:

成功识别到参数输入:

结果如下:

3 Windows + PhpStudy + Xdebug
3.1 Windos + PhpStudy 安装
这个安装就不说了,基本操作。
这里我的配置是:
Windows 11PhpStudy Pro 8.1
3.2 Xdebug 安装
3.2.1 Xdebug 扩展
PHPStudy官方也是封装好了Xdebug的,下面是存在Xdebug版本对应扩展文件的默认位置情况。打开
PHP文件位置:

直接在目录中搜索
Xdebug即可:

3.2.2 php.ini 配置
3.2.2.1 Xdebug 3
[Xdebug]
zend_extension=E:/phpstudy_pro/Extensions/php/php7.3.4nts/ext/php_xdebug.dll
xdebug.remote_enable=1
xdebug.client_host=localhost
xdebug.client_port=9000
xdebug.mode=debug
xdebug.idekey="PHPSTORM"
3.2.2.2 Xdebug 2
[Xdebug]
zend_extension=E:/phpstudy_pro/Extensions/php/php5.4.45nts/ext/p
xdebug.remote_enable=On
xdebug.remote_host=10.10.8.1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.idekey="PHPSTORM"
3.3 结果验证
添加一个 PHP 服务器:

验证
PHP 5.4(Xdebug 2)配置:

验证
PHP 7.3(Xdebug 3)配置:

验证结果:


4 Windows + PhpStudy + Xdebug(极简版)
前面说了,PhpStudy 官方已经有了 Xdebug 得扩展,但是却没有帮忙配置扩展,这明显不合理。
在几个月后得某一天,突然开窍,给我找到了:

把 php_xdebug 打开,那么在当前得 PHP 的 php.ini 中会自动添加 Xdebug 的配置:
[Xdebug]
zend_extension=C:/phpstudy/phpstudy_pro/Extensions/php/php5.4.45nts/ext/php_xdebug.dll
xdebug.collect_params=1
xdebug.collect_return=1
xdebug.auto_trace=Off
xdebug.trace_output_dir=C:/phpstudy/phpstudy_pro/Extensions/php_log/php5.4.45nts.xdebug.trace
xdebug.profiler_enable=Off
xdebug.profiler_output_dir=C:/phpstudy/phpstudy_pro/Extensions/php_log/php5.4.45nts.xdebug.profiler
xdebug.remote_enable=Off
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
但这里有一点需要注意,需要把以下内容进行修改:
xdebug.remote_enable=On
之后的步骤就和上述一致了,不做赘述。
5 Xdebug 调试超时问题
上面的
Xdebug配置完之后,每次使用大概45秒后,网页就会报500错误中断程序,也就是请求超时的意思。百度了一会,找到了一篇解决办法:https://maoshu.fun/archives/801.html
在
apache配置文件httpd.conf的最后面增加如下内容即可:
Timeout 3600
FcgidIOTimeout 3600
FcgidIdleTimeout 3600
IPCConnectTimeout 3600
IPCCommTimeout 3600
修改后重启下
apache即可生效。