0%

phpstrom+xdebug调试代码

​ 接下来想审计几个开源的cms,工欲善其事必先利其器,这里我用的是phpstrom+xdebug+phpstudy的组合。安装phpstrom和phpstudy这个不多说。

phpstudy

​ 注意这里不要使用apache作为中间件,这样会导致调试过程中会话丢失(大概1分钟不到)。

后来发现其实是phpstudy的apache默认配置问题,修改一下就行

image-20210727084808790

1
2
3
4
5
6
7
8
9
10
11
12
<IfModule mod_fcgid.c>
# php-cgi进程的生存时间
trueFcgidProcessLifeTime 9999
# php-cgi进程IO超时时间
FcgidIOTimeout 9999
# php-cgi进程连接超时时间
FcgidConnectTimeout 9999
# 上传文件的最大尺寸 100MB
trueFcgidMaxRequestLen 104857600
# php-cgi最大的进程数
# FcgidMaxProcesses 5
</IfModule>

先启动nginx和mysql

image-20210119185312944

再新建网站

image-20210119190147445

这个默认配置就行,注意使用cms推荐的php版本

打开网站能正常访问就行。

同时在 管理->php扩展-> 勾选xdebug

打开对应版本的php.ini文件

[xdebug]项添加idekey和打开远程调试

image-20210121121958881

phpstorm

​ 将网站根目录作为项目打开

打开设置选择php版本

image-20210119191031796

下拉php列表

配置服务器和phpstudy相同就行

image-20210119191134264

下拉调试

选择DBGp代理

image-20210119191229837

这里要注意的是这三个值要和php.ini中的对应

1
2
3
xdebug.idekey=PHPSTORM 
xdebug.remote_host=localhost
xdebug.remote_port=9000

在phpstorm 右上角添加配置

选择php web页面

image-20210119191734997

点击 验证测试xdebug没问题

image-20210119191827554

浏览器安装Xdebug helper

image-20210119192132260

在扩展选项中填写IDE key

image-20210119192225930

调试

先下好断点

然后点击监听

image-20210119192018629

Shift+F10 运行

接着在浏览器将Xdebug helper选择debug模式

image-20210119192710255

再去触发相应的代码,就能在断点处停下了

image-20210119193010239

接下来可以愉快的调试了!

对于运行在5.4及其以上的cms,调试时可以不使用phpstudy(需要xdebug插件),在右上角添加配置时选择php内置服务器即可

image-20210119194552083

这里是自己起了php监听,可以看到访问的请求,两种运行方法各有优劣。

后面又发现个问题

调试时会遇到debug会话未暂停的警告

image-20210119194221935

调试的网页也会报一个404错误,会影响后续的调试。

各种切换版本,修改配置,搜索引擎等操作,还是找不到解决办法。(救救孩子

所以打算弃了phpstudy,改用wsl2作为调试环境(我太难了)

后面发现,别偷懒直接设置在脚本第一行调试即可

image-20210727085451391

WSL2管理多版本php

作为一个调试环境,如果只有一个php版本无疑是失败的!

1
2
3
4
5
6
sudo add-apt-repository ppa:ondrej/php    //添加仓库源
sudo apt-get update //更新源
sudo apt-get install php5.6 //安装其他版本php
sudo apt-get install php5.6-xdebug //安装必须的插件
sudo apt-get install php5.6-mysql
...

更多内容参考这篇文章

如果是kali等debian系可以参考一下命令

1
2
3
sudo apt -y install lsb-release apt-transport-https ca-certificates 
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ buster main" | sudo tee /etc/apt/sources.list.d/php.list

修改php.ini文件

image-20210123221353899

添加 [xdebug]

image-20210123224346250

这里要注意

1.remote_host要填win10的wsl的ip,wsl不能直接通过localhost访问win10的端口

2.在win10防火墙的出站规则中把公用域的两个配置改成允许连接

image-20210123232107298

太草了,不是这个xdebug.log一辈子翻不了案

image-20210123222005027

PHPSTORM添加运行环境

这里的配置和上面一样,我就贴个图把

image-20210123222129044

image-20210123222154726

image-20210123222219179

运行 监听 浏览器开启xdebug

image-20210123222337715

image-20210123222355580

心累- -!

还有个问题就是每次重启后win10的wsl网域会变化,所以xdebug的配置也要跟着变化

这里可以考虑把wsl设置为静态IP,但我的解决方案是写个脚本修改xdebug的配置

1
2
3
4
#!/bin/bash
ip=$(cat /etc/resolv.conf | grep nameserver |awk '{print $2}')
#echo $ip
sudo sed -i "/^xdebug.remote_host/cxdebug.remote_host=$ip" /etc/php/5.6/cli/php.ini

另外一个解决办法是在php.ini

添加 xdebug.remote_connect_back = 1 //如果开启,将忽略 xdebug.remote_host 的参数。它会根据访问的ip直接回连

-------------本文结束感谢您的阅读-------------