探讨一下 Windows 下 PHP 环境最优解

几种方案以及各自的优缺点#

  • Windows 集成环境 (PhpStudy / PhpEnv 等)

    • 支持不完整 (部分 PHP 扩展不支持)
    • 更新不及时
  • WSL   (Windows Subsystem for Linux)

    • WSL 1: 好久没折腾了,前两天测试发现连不上外网 (没深究)
    • WSL 2: 始终避不开 io 性能问题
  • Hyper-V + Docker

    • 本来应该是最优解了,最近版本更新后,隔一段时间就会出现站点无法访问的问题~
  • 直接重装 Linux   N1f6M90TTS.png!large

最优解?#

大佬们提提意见






本作品采用《CC 协议》,转载必须注明作者和本文链接
啪嗒啪嗒啪嗒 (`・ω・´) つ_▃ <?php echo "PHP is the best language in the world!"; ?>
slowlyo
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 78
JaguarJack

Laragon,最优解 :speak_no_evil:

1年前 评论
JyPony 1年前
slowlyo (楼主) 1年前
JaguarJack (作者) 1年前
kindiaing 1年前

我浪费了几天时间最后果断换回黑苹果

1年前 评论
slowlyo (楼主) 1年前
slowlyo (楼主) 1年前
臭鼬 (作者) 1年前
翟宇鑫

Windows 没有最优解,用啥都是小问题不断
非要选的话:WSL

1年前 评论
slowlyo (楼主) 1年前

换 mac :confused:

1年前 评论
slowlyo (楼主) 1年前

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...

1年前 评论

没啥推荐的,你习惯用哪个就用哪个,单就开发而言,能完成工作就好。
你列举的四个方案,其实开发本质差别就 2 点。

  1. 系统环境,win 和 linux 的区别,对开发的影响部分 linux 扩展在 win 下支持不太好,文件和目录名称大小写不敏感等。
  2. IO 性能,虚拟挂载性能差些。

其他就是各类工具安装和使用差别,除了 win 集成环境外,剩下这些东西有一定的学习成本,简单快捷肯定是集成环境快。

1年前 评论

WSL2 是一个不错的选择,不过人生苦短,我选择虚拟机,好处是可以完整使用,不像 wsl 有部分阉割,而且还可以统一系统环境,再不济还可以拷贝虚拟机

1年前 评论

只是自己开发测试无所谓,但生产用 Linux

1年前 评论

一直用宝塔

1年前 评论
Ailon 1年前

homestead 感觉还行 其他研究起来也费劲 或者轻量一点的虚拟机装宝塔

1年前 评论
kwok_wah 1年前
DonnyLiu

WSL 太麻烦了,折腾起来人家用宝塔的都敲了两天代码了。现在在用宝塔,不过还是建议能用 mac 就用 mac

1年前 评论

用虚拟机啊,Virtual Box 免费的,在虚拟机上装 Centos 或者 Ubuntu,然后挂载文件夹

1年前 评论
slowlyo (楼主) 1年前
小煜 1年前
lovewei 1年前
小煜 1年前

wsl2+docker

file

1年前 评论
slowlyo (楼主) 1年前
slowlyo (楼主) 1年前
slowlyo (楼主) 1年前
slowlyo (楼主) 1年前
ltaoo (作者) 1年前
ltaoo (作者) 1年前
ltaoo (作者) 1年前
ltaoo (作者) 1年前
sanders

用 docker

1年前 评论

UPUPW。支持 php,java,.NET,不装 IIS 运行.NET 网站,支持 apache、nginx 等环境。

1年前 评论
Junwind

vmware 虚拟机 + vmware tools 工具目录共享 + phpstorm

1年前 评论
slowlyo (楼主) 1年前
slowlyo (楼主) 1年前
lovewei 1年前
Junwind (作者) 1年前
Junwind (作者) 1年前
Junwind (作者) 1年前

wsl2 + docker
1. 文件不映射到物理机 就可以避开 io 的问题 2. 用 vscode/ide 下的 直接直连容器开发功能 可以直接享受 win 的生态 Linux 下的开发享受 :thumbsup:

1年前 评论

你说的自动休眠问题 可以在如图所示的地方关闭

file

1年前 评论
slowlyo (楼主) 1年前
slowlyo (楼主) 1年前
Silly-dog (作者) 1年前

vmware + docker + phpstorm

1年前 评论

docker 如果你觉得不好用,可能你需要学习一下。

1年前 评论
slowlyo (楼主) 1年前

vm + docker + vscode 远程开发 或者公司的电脑性能差点的是 wsl2 + docker + vscode 容器内开发

1年前 评论

wsl2 + 宝塔,项目放在 wsl2 的 /www/wwwroot 目录下,写个脚本开机自动启动 wsl2. 用起来跟 hyper-v 安装虚拟机 samba 服务映射网络磁盘体感上没什么区别,甚至 wsl2 更方便一点,因为 windows 可以直接查看子系统的目录。开发的话直接用编辑器打开子系统的目录就可以.

1年前 评论

直接装个 php 加一个 mysql,多版本配置一下命令:php7 artisan serve 或者 php8 artisan serve 启动

1年前 评论

目前用的 wls2 ,ubuntu 中直接 apt 安装了几个 php 版本,项目启动使用 php-cli ,项目代码在 windows 目录,在 Ubuntu 中设置了软连接,目前没有发现 IO 问题

file

file

1年前 评论

file 必须这个

1年前 评论

WSL2 为什么会有 IO 问题 :sweat_smile:。WSL2+Docker,用了几年了,没发现什么问题,什么操作系统问题、文件路径问题、大小写问题、多版本问题都不用担心了。墙裂推荐 :smirk:

1年前 评论
LXK 1年前
zhangrongwang (作者) 1年前

开发环境而已,无所谓

1年前 评论
skarner

Mac/Linux Docker

Windows WSL+Docker

1年前 评论

世间系统千千万,何必围着 Windows 转,考虑用 MAC 下的 ServBay 吧,帮你节省下的时间足够你去怀疑人生 :see_no_evil:

1年前 评论

Windows WSL2 安装原生 Docker 和使用 Docker Desk 有区别吗

1年前 评论
slowlyo (楼主) 1年前

一直用的 WSL2+docker engie, 没有用 docker 桌面版了,那个经常出问题,容器时不时的不启动。但是 docker engine 有个问题就是好像 xdebug 端口无法识别,9003 之类的端口是开了的。但是在 validate 端口时一直 404

1年前 评论

我是 WSL + WSL 里面的 docker 没感觉有啥 IO 的问题

1年前 评论

我是用 window 的 phpstudy 和 wsl;项目中没有不能用的扩展就 phpstudy;有不能用的就用 wsl; 预算充足还是 mac 吧;

1年前 评论