Windows 主要就是扩展问题,加扩展简单的简单(提供 dll 的直接下载),难的非常难(需要 VS2022 编译)。另外如果在 Windows 开发 CGI 应用需要依赖一个额外的 web 服务器,比如 IIS、EasyWebSvr。如果只开发 cli 程序或者使用内置 Server 那其实比 *nix 要简单很多的,官网下载即用。
另外一个重要的问题就是很多框架、组件、扩展虽然写明支持各种 PHP 版本,但是它可能没有在 Win32 上面的 PHP 测试过,甚至根本没有提供兼容 API。可能存在路径问题(比如典型的根目录问题和反斜杠问题)。这些可能不是 PHP 本身的问题,是大家都倾向 *nix 生态而设计导致的。毕竟 PHP 是一个更适合服务端运行的语言,特意去考虑在 Windows 上运行的人并不多。
如果一定要在 Windows 上 Win32 PHP 下开发 CLI、Web 程序,我觉得最好的方式就是直接使用兼容 Win32 环境的框架。除此之外,如果你开发的代码最终只会在 Linux 运行,也许 remote 开发或者虚拟机是更好的方案(WSL 在实际使用过程中有不少坑,短时间可能发现不了)。
另外插个眼,如果有大佬懂 Windows 的编译,可以帮忙完善下 Windows 静态编译 PHP 的支持,或许以后就直接下载一个 php.exe 本地开发就完事了。
github.com/crazywhalecc/static-php...
没啥推荐的,你习惯用哪个就用哪个,单就开发而言,能完成工作就好。
你列举的四个方案,其实开发本质差别就 2 点。
- 系统环境,win 和 linux 的区别,对开发的影响部分 linux 扩展在 win 下支持不太好,文件和目录名称大小写不敏感等。
- IO 性能,虚拟挂载性能差些。
其他就是各类工具安装和使用差别,除了 win 集成环境外,剩下这些东西有一定的学习成本,简单快捷肯定是集成环境快。
wsl2 + 宝塔,项目放在 wsl2 的 /www/wwwroot 目录下,写个脚本开机自动启动 wsl2. 用起来跟 hyper-v 安装虚拟机 samba 服务映射网络磁盘体感上没什么区别,甚至 wsl2 更方便一点,因为 windows 可以直接查看子系统的目录。开发的话直接用编辑器打开子系统的目录就可以.
目前用的 wls2 ,ubuntu 中直接 apt 安装了几个 php 版本,项目启动使用 php-cli ,项目代码在 windows 目录,在 Ubuntu 中设置了软连接,目前没有发现 IO 问题
WSL2 为什么会有 IO 问题 。WSL2+Docker,用了几年了,没发现什么问题,什么操作系统问题、文件路径问题、大小写问题、多版本问题都不用担心了。墙裂推荐
一直用的 WSL2+docker engie, 没有用 docker 桌面版了,那个经常出问题,容器时不时的不启动。但是 docker engine 有个问题就是好像 xdebug 端口无法识别,9003 之类的端口是开了的。但是在 validate 端口时一直 404
推荐文章: