因Windows官方已停止对PHP 8.0+原生支持,存在扩展滞后、函数行为不一致及文件I/O性能差等系统层限制,而WSL2提供真实Linux内核,可直接编译所有PHP扩展,实现与生产环境零差异,调试一次即可上线。

为什么选WSL而不是Windows原生PHP
Windows官方已停止对PHP 8.0+版本的原生支持,扩展滞后、函数行为不一致、文件I/O性能差等问题长期存在。Drupal后台卡顿、Swoole无法编译、Redis扩展缺失——这些都不是配置错误,而是系统层限制。WSL2提供真实Linux内核,所有PHP扩展可直接从源码编译,与生产环境零差异,调试一次就能上线。
启用WSL2并安装Ubuntu
以管理员身份打开PowerShell,依次执行:
- dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
- dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
重启后运行 wsl --install。该命令自动安装WSL2内核和Ubuntu 24.04 LTS(推荐,兼容性优于22.04),并设为默认发行版。首次启动时设置普通用户(不要用root),密码需至少8位含大小写字母+数字。
配置LNMP基础栈(Nginx + PHP-FPM + MariaDB)
进入WSL终端后,先更新系统:
通过 SSH 隧道从 Android 设备在互联网上对 Windows PC 实现完整远程控制的设置与使用指南,适用于远程桌面访问、安全 RDP 等。
立即学习“PHP免费学习笔记(深入)”;
- sudo apt update && sudo apt upgrade -y
- sudo apt install nginx mariadb-server php-fpm php-cli php-mysql php-curl php-gd php-mbstring php-xml php-zip -y
关键配置项:
- Nginx默认站点配置文件在 /etc/nginx/sites-available/default,将
root指向你的项目目录(如/var/www/html) - PHP-FPM必须监听Unix socket(
/run/php/php8.3-fpm.sock),不能绑定127.0.0.1:9000——这是WSL网络模型决定的 - 编辑
/etc/php/8.3/fpm/pool.d/www.conf,确认listen = /run/php/php8.3-fpm.sock且listen.owner = www-data - 启动服务:sudo systemctl start nginx php8.3-fpm mariadb,并用
sudo systemctl enable设为开机自启
验证与调试技巧
创建/var/www/html/info.php,内容为<?php phpinfo(); ?>,访问http://localhost/info.php应显示完整PHP信息页。若报502 Bad Gateway,重点检查三处:
- PHP-FPM进程是否运行:
sudo systemctl status php8.3-fpm - socket文件是否存在且权限正确:
ls -l /run/php/php8.3-fpm.sock(属主应为www-data) - Nginx错误日志:
sudo tail -f /var/log/nginx/error.log
VSCode中安装Remote - WSL扩展,直接打开WSL中的项目文件夹,终端、调试器、Git全部走Linux路径,无需任何跨系统同步。


















