Mac电脑M芯片+远程调试及Xdebug配置踩坑记录
A_Snail Lv3

最近打算搞些php代码审计学习一下,但是遇到mac有不少问题,所以记录下踩坑。

看了下网上的文章,基本都是本地多环境,但我不想在本地装那么多PHP,所以就搞了远程配置调试。

为什么选择宝塔
一是主要是本机环境太多了的话 个人感觉会很烦,而且跟着网上文章折腾了半天也没成功,最终决定使用Ubuntu安装宝塔,主要是为了方便版本管理。 当然,也可以说是宝塔更无脑一点,能直接点点点。更适用于我这种脚本小子
二是,我本来是打算mac的phpstudy有问题的话,就用虚拟机搞就好了,但是理想很丰满,现实总是措手不及,因为小皮面板,并没有Arm架构的。 所以才想到还有一个宝塔。

踩坑记录

  1. 跟着试了phpstudy,但是u1s1,phpstudy在mac上 是真的难用
  2. 紧接着本地试了一下,折腾半天,指定版本各种出错。

记住重点就是
phpize要使用你当前要安装xdebug的版本的对应版本的
还有就是 记得多折腾 👹👹

环境准备

这里是以mac电脑M芯片+pd虚拟机
mac电脑需要安装好Phpstrom

这里我用的ubuntu的虚拟机
虚拟机打开宝塔官网,然后找到Linux对应发行版,执行对应命令就行

image
https://www.bt.cn/new/download.html
image
安装完成后,打开后台登录。
image

按照需求安装好对应中间件
image

这里选择nginx,后面有个问题,用1.24的Nginx好像有个报错,具体的细节忘记了,所以后面换了1.22。文章是后写的,所以没有图,手动贴图🤡

Ok安装完毕后,开始xdebug的安装。

xdebug

首先打开官网找到对应版本进行下载,如果不知道是哪个版本,可以本地输出phpinfo,然后复制源码到这个网站进行查询
https://xdebug.org/wizard
image
本地写入脚本展示phpinfo 查看源代码,然后复制进入上面的框内

image

image
image

这里可以看到,提示你需要phpize,所以这里牵扯到一个环境变量的问题,因为我们一般不可能只有一个php版本,而且每次切换也得修改系统变量,就会很麻烦。
你直接根据他这里的命令执行的执行,版本是系统环境变量里面的php版本的
这样会导致生成的xdebug也是对应版本的,和我们想要的不是同一个

下载源码-编译安装

OK 我们下载好源码后,进入源码的路径

1
2
3
4
5
6
获取xdebug的源码地址 之后进入文件夹用以下的命令编译
cd xdebug3.1x

phpize 这里需要找到
./configure
sudo make && make install

这里找到我们安装的php版本的/bin目录。找到对应的
image

1
2
3
/www/server/php/73/bin/phpize 
这个才是我们需要的phpize,所以我们这里需要使用
/www/server/php/73/bin/phpize ./configure --with-php-config=/www/server/php/73/bin/php-config

这里后面的路径可以不写,不写我们写入php.ini的时候,就要跟上xdebug.so的绝对路径,如果编译的时候写了就可以直接写 zend_extension = xdebug

现在进入xdebug源码路径
image

执行

1
/www/server/php/73/bin/phpize ./configure --with-php-config=/www/server/php/73/bin/php-config

image

等待编译完成 会在xdebug-3.1.6/modules 路径下生成一个xdebug.so
image

然后我们根据刚刚xdebug界面的命令,直接给他复制到php扩展目录

1
cp modules/xdebug.so /www/server/php/73/lib/php/extensions/no-debug-non-zts-20180731/

然后我们再到php版本下,修改php.ini,就编译完成了
php.ini 一般在对应版本的/etc/目录下
image

OK
image
暂时只需要加这个其实就OK了,后面再根据报错一步步进行添加,但是太麻烦了,直接拿

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[Xdebug]
zend_extension="xdebug.so"
xdebug.mode=debug
xdebug.start_with_request=trigger
xdebug.client_host="10.211.55.2"
;xdebug3.0中用于代替之前的xdebug.remote_connect_back=On,它会自动从$_SERVER['HTTP_X_FORWARDED_FOR']
;或$_SERVER['REMOTE_ADDR']变量中获取ip,当然因为$_SERVER只有服务器模式有所以客户端模式是用不了的(可配置其它变量)
;如果找不到ip它会回退(fallback)到xdebug.client_host指定的ip
xdebug.discover_client_host=true
xdebug.client_port=9003
xdebug.start_with_request=yes
xdebug.remote_handler="dbgp"
xdebug.log=/tmp/xdebug.log
xdebug.log_level=7
xdebug.idekey=PHPSTORM

xdebug.client_host=”10.211.55.2” 这个ip 是你mac物理机的ip,而不是ubuntu虚拟机的ip 这个得记住。

验证是否开启xdbug

1
2
3
4
<?php
xdebug_info();
?>

可以新建php,然后输入以上代码,然后打开对应页面
image

这里为enabled 即代表成功。

Phpstrom

OK 现在就剩最后的一步了
在Phpstrom进行测试,是否能进行远程调试
远程调试还有一点是需要本地源码和远程源码路径需要映射,配置时候需要利用sftp,需要虚拟机的账号密码 这里建议加个root用户,因为有可能有的操作权限不够。

image

打开设置,这里找到xdebug,把端口修改为9003,和php.ini中的要一致。
image
接着找到上面的php
image

image

image

这样表示成功了
image

回到主页编辑配置
image

image

这里点击路径映射,然后本地和远程路径对上就行

进行验证
image

image

这里前面忘记说了。根据实际情况选择后对应上即可。
image

OK 很纳闷是吧
重点来了,这里记得先开启监听,然后再点击验证

image

然后再次验证
image

完美搞定。

总结

踩了蛮多坑吧,因为我这个人有强迫症,最开始想要简单点,想用phpstudy搞,下载完后发现 一言难尽,
然后想着用本机的,但是环境变量很烦,要么就是版本不同,要么就是报错,又懒得修改环境变量,本来就是觉得麻烦才不想搞的,所以又作罢。
然后偶然发现mac用pd的window虚拟机虽然架构不同,phpstudy也能跑,但是bug也很多,也作罢。
坑点很多。
反正就是Windows十分钟解决战斗,M系列的Mac就看你心情了。
最终得到结论: M系列的Mac会惩罚每一个不爱折腾的网安人。
也希望能帮助到有需求的师傅。

参考文章
https://blog.csdn.net/sun_weitao/article/details/132832939
https://zhuanlan.zhihu.com/p/417585043