PHP开发环境(XAMPP+XDebug+VSCode)搭建

PHP开发环境(XAMPP+XDebug+VSCode)搭建

XAMPP

当年一开始学习PHP的时候就是用的xampp傻瓜式一键安装PHP开发环境,这么多年过去了,这个工具依然好用。

这个程序会把apache/PHP/Mysql打包安装,如果你不想折腾的话,强烈建议使用。

下载

XAMPP的官网是https://www.apachefriends.org/zh_cn/index.html

安装包托管网站是https://sourceforge.net/projects/xampp/files/,有各种平台的安装包。

这里提供一个上传到百度盘的最新windows安装包:

链接:https://pan.baidu.com/s/116ZZ-1BA1xiRzdfOG4OQSQ
提取码:d25q
复制这段内容后打开百度网盘手机App,操作更方便哦–来自百度网盘超级会员V1的分享

安装

安装过程没啥好说的,一路next,值得注意的是一开始会弹窗说杀毒软件可能会阻止程序安装,但我没有理会,顺利安装完毕。

运行后会显示XAMPP的控制面板:

PHP开发环境(XAMPP+XDebug+VSCode)搭建

要使用相应的服务只要在最左边的一列打勾就可以自动安装,然后点击右侧的start就能运行。

我使用的时候因为之前安装了VMware,端口冲突,Apache服务使用的默认端口是443,所以需要修改端口。

要检查端口占用XAMPP提供一个非常方便的工具,Netstat,就是右侧那个绿色地球一样的图标:

PHP开发环境(XAMPP+XDebug+VSCode)搭建

这里会显示你电脑上所有的端口占用情况,选择一个空闲的端口即可,我选了8001。

修改端口的话是config->service and port,然后填入新端口号即可:

PHP开发环境(XAMPP+XDebug+VSCode)搭建

那个主端口不用理会,80是http服务的默认端口,由系统接管。

这里不得不说XAMPP有点坑的地方了,修改了这里并不算玩,你如果尝试启动Apache服务的话依然会没有响应,还没报错和日志,只有用CMD从工作目录启动httpd.exe才能发现Apache依然是尝试启用443端口。所以这里还要额外修改Apache中的配置:

在Apache的配置文件httpd-ssl.conf中搜索443就能找到监听端口配置,修改为新端口号:

PHP开发环境(XAMPP+XDebug+VSCode)搭建

配置虚拟主机

虚拟主机的配置目录位于xampp\apache\conf\extra

在httpd.conf中默认是已经打开虚拟主机配置的,所以这里不需要再修改,直接修改httpd-vhosts.conf文件:

找到

NameVirtualHost *:80

这一行,去掉注释。

在尾部追加自己定义的虚拟主机设置:

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "D:/workspace/myweb.com"
    ServerName myweb.com
    ServerAlias www.myweb.com
    ErrorLog "logs/myweb.com-error.log"
    CustomLog "logs/myweb.com-access.log" common
<Directory "D:/workspace/myweb.com">
Require all granted
</Directory>
</VirtualHost>

重启apache服务,OK。

PHP开发环境(XAMPP+XDebug+VSCode)搭建

VSCode

安装x-debug

x-debug是php的动态调试工具,安装以后就可以在VSCode中设置断点,动态查看PHP运行时的变量和函数调用情况。

这里说一下XDebug的存在意义和运行机制:

PHP可以说是一门专门用于互联网开发的语言,所以基本上和web服务器是密不可分的,商用开发也基本上都是把代码放在远程服务器上,直接在Linux服务器上运行调试,这样才能接近正式环境,但这样也遇到一个问题,就是没法像JAVA或者Android开发时那样,在本地IDE方便地进行运行时debug。

XDebug就是用于这种情形下地PHP开发扩展,本体安装在需要调试的web服务器上,当你用浏览器访问web服务器的某个PHP页面的时候,XDebug就会和你的本地IDE建立一个通信,读取你IDE设置的断点等信息,然后就能像其它本地语言调试那样进行逐步调试。

理解了上面这些,就能理解下面的一些配置意义。

x-debug的官方下载页面在这里

PHP开发环境(XAMPP+XDebug+VSCode)搭建

这里需要按照你的PHP版本下载对应的X-Debug,如果用的是XAMPP自带的PHP,可以在XAMPP的根目录下查看readme_en.txt文件:

PHP开发环境(XAMPP+XDebug+VSCode)搭建

我这里PHP版本就是8.0.2 VS16 x64 TS,对应选择下载就行了。

下好后把下载的DLL放到PHP/ext目录下,再修改PHP根目录下的php.ini文件,在尾部追加:

[xdebug]
zend_extension=php_xdebug-3.0.3-8.0-vs16-x86_64.dll
xdebug.client_port = 9005
xdebug.client_host = localhost
xdebug.log = D:/software/Coding/xampp/php/xdebug.log
xdebug.mode=trace,debug,develop
xdebug.start_with_request=yes
xdebug.output_dir = D:/software/Coding/xampp/php/tmp
xdebug.force_display_errors = 1

需要注意的是第二行要准确地指定到刚刚安置好地DLL文件,因为这里是安装到PHP的指定扩展文件目录,即php/ext所以是不用指定完整目录路径,只要指定文件名就行,如果你存放在其它目录则需要指定完整路径。

还有一个需要注意的地方是不能省略dll文件后缀名,网上有的教程是省略的,那样是不能成功加载xdebug的。

这里从上到下解释一下xdebug配置项的用途,需要特别说明的是这里的配置是适合xdebug 3.0.3版本的,所以和其它教程中老版本的是不同的。

  • 网上找到的诸多XDebug配置教程都是老版本的配置,均不能在最新版本中使用,所以强烈建议用户直接去XDebug的官网配置项介绍页面自行查看最新的配置方式。

  • 吐槽一下,因为这个原因我折腾了一个下午加晚上。

下面是对XDebug主要用到的配置项的介绍:

  • xdebug.client_port:IDE环境的监听端口号,XDebug启动后会使用这个端口号与IDE环境交互,3.0.3版本中默认值已经变成了9003,可能是以前9000端口经常被其它程序占用的缘故,虽然9003已经比较冷门,多半可以直接使用默认值,但无论如何这里最好还是直接显示指定一个端口号,谁知道官方会不会变来变去的。

  • xdebug.client_host:IDE环境的主机名/IP,如果是Linux环境可以使用网络套接字,这在官方介绍页面里有详细说明。如果client_port,同样是用于与IDE通信的。

  • xdebug.log:XDebug运行时日志文件,包括与IDE建立通信失败等都会输出到这个文件,所以如果捣鼓了半天依然不能正常在IDE中断点调试,不妨先配置上这个选项自行查看日志记录。

    我排查问题的时候配置了这个,但是依然没有日志产生,后来发现是xdebug.mode配置项的问题。

  • xdebug.mode:XDebug的运行模式,有多种可选,并且可以搭配使用,这里介绍我用到的三种:

    • trace:对函数调用进行跟踪。

    • debug:对代码进行步进(step)调试。

      **注意:如果没有启用debug模式是不能在IDE中使用断点进行步进调试的!**这是个大坑,我就是因为这个折腾了好长时间。

    • develop:提供一些开发帮助功能,比如统计代码运行时间和内存占用等。

  • xdebug.start_with_request:是否在http请求产生的时候就启动XDebug。

  • xdebug.output_dir:XDebug跟踪到的函数调用等信息会输出到这个目录。

    可以用这个目录产生的日志判断XDebug的安装问题,比如我的情况就是能产生函数跟踪日志,但是并不能产生XDebug运行时和IDE通信的那个日志,后来发现是因为xdebug.mode没有启用步进调试模式,XDebug就不会去尝试和IDE通信。

  • xdebug.force_display_errors:是否强制显示错误。

    这个选项可以覆盖掉PHP中指定的错误输出模式,一般是不用设置的,我这里是因为XDebug一直不能和IDE正常通信,为了查错添加的。

现在可以验证是否配置好了XDebug,先重启Apache服务,通过在php文件中加入echo xdebug_info();的方式输出XDebug配置信息:

PHP开发环境(XAMPP+XDebug+VSCode)搭建

这样就表示已经安装好了xdebug模块。

VSCode设置

然后在VSCode中安装两个PHP插件:

PHP开发环境(XAMPP+XDebug+VSCode)搭建

然后在文件>首选项>设置中的扩展下,选择PHP:

PHP开发环境(XAMPP+XDebug+VSCode)搭建

在打开的JSON文件中加入:

    "php.validate.executablePath": "D:/software/Coding/xampp/php/php.exe",
    "php.executablePath": "D:/software/Coding/xampp/php/php.exe",

再在工作区中添加网站根目录:

PHP开发环境(XAMPP+XDebug+VSCode)搭建

然后在debug窗口给网站项目加入生成debug配置文件,不需要修改,保持默认即可:

PHP开发环境(XAMPP+XDebug+VSCode)搭建

这里会自动生成两个debug配置:

  • Launch currently open script:这个是用于直接在IDE用运行PHP代码并在内置终端显示结果。
  • Listen for XDebug:这指的是开启一个对XDebug的监听,如果目标服务器上配置了XDebug,并且主动连接到本机IDE的XDebug监听,就能实现断点调试等IDE功能。

IDE+XDebug联合调试

IDE这边准备好了,开启PHP跳步debug:

  1. 先确保设置好配置的XDebug有被正常加载,如果没有就重新启动Apache。

  2. 在VSCode中运行Listen for XDebug,这时候会出现一个debug工具条:

PHP开发环境(XAMPP+XDebug+VSCode)搭建

这表示IDE中启动了XDebug客户端监听程序,只要WEB服务器的XDebug和这边能建立正常通信,就可以进行跳步debug调试。

  1. 在代码中加入断点。当然也可以先加断点再启动监听,无所谓先后顺序。

  2. 启动浏览器,访问目标WEB服务器,这里我是本机配置的虚拟服务器:

    PHP开发环境(XAMPP+XDebug+VSCode)搭建

  3. 程序窗口会自动切换到VSCode,如果没有,手动切换。VSCode这种会显示执行到断点位置,并且有变量信息等:

    PHP开发环境(XAMPP+XDebug+VSCode)搭建

  4. 后面就是正常的逐步debug或者跳步之类的调试操作了,不属于本文介绍范围。

好了,所有内容介绍完毕,不得不说这里边的坑真多,整整花了一个下午加一个晚上才排查好,心好累。

上一篇:搭建DVWA渗透测试靶机


下一篇:项目运行环境配置教程Apache+php+mysql