PhpStorm 集成 WSL 虚拟机中的 PHP 进行单元测试和代码调试

前言

前面学院君分别给大家介绍了如何在 Windows 中基于 WSL 搭建 PHP 本地开发环境,以及在 WSL 虚拟机中基于 Docker 编排 LNMP 运行环境,并且学院君前面已经介绍过,WSL 本地开发环境的最佳实践是把 Windows 系统作为编码环境,把 WSL 虚拟机作为代码运行环境,这样,一方面我们就可以充分利用 Windows 图形界面的优势提升编码效率,另一方面可以利用 Linux 虚拟机与线上系统环境一致的优势对代码进行充分测试(基于 Linux 的代码运行环境搭建也更加简单),降低上线风险。

这样,就会有一个问题,我们在宿主机通过 PhpStorm、VS Code 等代码编辑器进行编码,但是这些编辑器中集成的 PHP 默认都是本地宿主机的,如果我们想要在这些编辑器中执行一些 PHP 脚本、运行单元测试或者进行代码调试,就会涉及到调用的 PHP 依然是本地软件,而不是 WSL 虚拟机中的 PHP 和对应扩展,绕了一圈,代码的执行环境又变成本地环境了。

虽然可以在独立的终端窗口中连接到虚拟机执行这些测试和调试操作,但有的时候,在代码编辑器中集成的单元测试、代码调试等功能确实很好用,体验更好,也更流畅,尤其是代码调试,只能在图形界面中完成。因此,我们需要在这些代码编辑器中将 WSL 虚拟机的 PHP 集成过来,这样,就可以在本地代码编辑器中调用 WSL 虚拟机的 PHP 完成对应的单元测试和代码调试功能。

接下来,我们以 PhpStorm 为例来演示如何将其中默认的 PHP 配置为使用 WSL 虚拟机中的 PHP 解释器。

配置 PhpStorm 使用 WSL PHP CLI

PhpStorm 自 2019.3 版本开始支持集成 WSL 虚拟机中的 PHP CLI,我们可以在 Settings -> Language & Frameworks -> PHP 界面中点击 CLI Interpreter(默认是本地 php.exe 对应的路径)输入框右侧的按钮(下图红框内),然后选择「From Docker, Vagrant, VM, WSL, Remote...」:

-w1241

在弹出窗口点击右上角「+」按钮新增 CLI 解释器配置,并且在打开的配置窗口中选择「WSL」,然后选择 WSL 虚拟机中 Linux 的发行版本以及 php 可执行文件的路径,这就是位于 WSL 中的 PHP CLI 解释器:

-w1013

如果你知道这个路径是什么,可以通过 which php 命令在虚拟机中查看:

完成配置后,点击「OK」确定:

应用并保存更改,点击「OK」回到上一级界面:

你可以配置 PhpStorm 中当前打开的项目与虚拟机对应项目的路径映射,这样就完成了 PhpStorm 使用 WSL 虚拟机 PHP CLI 的基本配置。

在 PHPUnit 中应用 WSL PHP CLI

你可以在 Composer 和 TestFramework -> PHPUnit 中应用这个配置:

然后设置 PHPUnit 库的路径,这里没有在项目中安装的话可以跳过:

如果安装过 PHPUnit 则可以通过配置该路径在 PhpStorm 中基于 WSL 虚拟机的 PHP 解释器进行单元测试。

在 WSL 中启用 PHP Xdebug 扩展

接下来,我们在 PhpStorm 中演示基于 WSL 中的 PHP Xdebug 扩展进行代码调试。

在此之前,需要在 WSL 虚拟机中配置启用 Xdebug,使用 apt install php 安装的 PHP 默认已经安装了 Xdebug 扩展,我们可以通过 php --ini 命令查看对应的配置文件:

-w937

打开这个配置文件,并添加启用 Xdebug 的配置信息:

zend_extension=xdebug.so
xdebug.remote_enable=1
xdebug.remote_host=localhost
xdebug.remote_port=9001
xdebug.remote_autostart=1
xdebug.profiler_enable=1
xdebug.profiler_output_dir="/tmp"
xdebug.idekey=PHPSTORM

我们在 D 盘的 scripts 目录下新建一个 index.php,通过 phpinfo() 查看 PHP 扩展信息,验证 Xdebug 扩展是否已经启用:

然后在虚拟机中运行如下命令启动 PHP 内置的 Web 服务器对外提供服务:

在 Windows 宿主机浏览器中访问 http://localhost:9000,就可以看到对应的 Xdebug 配置信息:

基于远程 PHP Xdebug 进行代码调试

确认 Xdebug 已经启动后,修改 index.php 代码如下:

<?php
$msg = "Hello WSL";
echo $msg . PHP_EOL;

接下来,在 PhpStorm 中,点击 Run -> Edit Configuration... 打开代码调试配置窗口,新建一个 PHP 远程调试配置:

目前还没有配置任何远程服务器,你可以在上面这个窗口中点击 Servers 输入框右侧的按钮(红框圈中的),打开服务器配置界面,按照下图示例依次输入服务器名称、主机、端口、调试器、项目路径映射(本地与远程路径):

然后应用这个配置并关闭窗口,在上一级界面中 Server 下拉框就会选中刚刚创建的服务器,接着在 IDE key 中输入 PHPSTORM(与 Xdebug 配置保持一致):

应用这个更改并点击「OK」关闭窗口,在 Setting -> Languages & Frameworks -> PHP -> Debug 配置界面,将 Xdebug 的 Debug port 修改为 9001(和 Xdebug 配置保持一致):

应用该更改,点击「OK」关闭窗口,这样我们就完成了 PHP 远程代码调试的所有配置工作了。 在 PhpStorm 的「Run」下拉菜单点击「Start Listening for PHP Debug Connections」,就可以开始监听 PHP 远程代码调试了:

index.php 中设置一个断点,在浏览器中再次访问 http://localhost:9000,就可以看到 PhpStorm 中的代码执行进度停在了断点位置:

在键盘中点击「F8」快捷键,进入下一步代码的执行:

可以在最下面的调试区看到对应的 PHP 变量信息,再次点击「F8」,代码执行完毕,浏览器页面渲染出对应的字符串:

程序退出,本次代码调试工作结束。这样,我们就完成了在 PhpStorm 中监听 WSL 虚拟机中 PHP 代码远程调试的工作。

有了以上的配置经验,想必你可以很轻松地实现在 PhpStorm 中基于 WSL PHP CLI 进行单元测试,以及在本地 PhpStorm 中对运行在 WSL Docker 容器内的 PHP Web 应用进行远程代码调试,赶快去试试吧。

小结

作为 Windows 系统搭建 PHP 本地开发环境三步曲的最后一篇,关于如何基于 WSL 虚拟机搭建高效的 Windows PHP 本地开发环境就告一段落了,在这三篇教程中,我们依次学习了如何在 Windows 中启动 WSL 虚拟机,并安装 Ubuntu 系统,以及如何在 Ubuntu 虚拟机中初始化 PHP 开发环境,WSL 与 Windows 本地文件系统如何映射(第一篇),然后我们学习了如何在 WSL 虚拟机中基于 Docker Compose 编排和启动 PHP Web 项目运行环境(LNMP,第二篇),最后,我们还学习了如何在本地 PhpStorm 中集成 WSL 虚拟机中的 PHP CLI 解释器进行单元测试和远程代码调试(本篇)。

接下来,我们将继续 PHP 全栈工程师系列后续实战教程之旅。

上一篇: 选择一款趁手的 PHP 代码编辑器

下一篇: 编写第一个 PHP 程序