frankenphp 在 wsl2 中可直接运行,无需预装系统 php,因其 linux 二进制静态链接了 php 8.5 及常用扩展;但需手动下载、赋权安装至 /usr/local/bin,项目须置于 wsl2 原生路径(如 /home/...),caddyfile 需配置正确且监听高位端口或使用 sudo 启动。

WSL2 里装 FrankenPHP 能直接用,不用额外配 PHP
FrankenPHP 的 Linux 二进制是静态链接的,自带 PHP 8.5 和常用扩展(pdo_mysql、mbstring、openssl、json 等),WSL2 的 Ubuntu/Debian 发行版上不需要先装系统级 PHP,也无需 php.ini 或 php-fpm。你只管下二进制、加执行权限、丢进 /usr/local/bin 就能跑。
curl 安装脚本在 WSL2 里可能卡住或失败
官方 install.sh 依赖 curl + sh,但在某些 WSL2 配置(比如启用了代理、DNS 解析异常、或 shell 是 zsh 默认)下会静默退出或报 command not found: frankenphp。更稳的方式是手动下载:
- 去 GitHub Releases 找最新版
frankenphp_*.linux-amd64.tar.gz(WSL2 多数是 x86_64) - 解压:
tar -xzf frankenphp_*.linux-amd64.tar.gz - 赋权并安装:
chmod +x frankenphp && sudo mv frankenphp /usr/local/bin/ - 验证:
frankenphp --version和frankenphp php-cli -m | grep pdo(确认你要的扩展在列表里)
启动 Laravel 项目前必须检查 Caddyfile 路径和权限
WSL2 的文件系统权限模型和 Windows 不同,挂载点(如 /mnt/c/...)默认没有执行权限,且 Caddyfile 若放在 Windows 文件系统上,FrankenPHP 会拒绝加载——它只信任 Linux 原生路径下的配置。
- 把 Laravel 项目移到 WSL2 原生路径,比如
/home/yourname/myapp,别放/mnt/c/Users/... - 在项目根目录建
Caddyfile,内容至少包含:{ frankenphp } localhost { root * public/ php_server { try_files {path} /index.php } } - 确保
public/目录可读:ls -l public/中不要出现??????????;若权限混乱,运行chmod -R 755 public/
监听 80/443 端口在 WSL2 需要额外授权
WSL2 默认不允许非 root 进程绑定 1024 以下端口,直接 frankenphp run 会报 listen tcp :80: bind: permission denied。
- 临时方案:改用高位端口,比如在
Caddyfile里写localhost:8080 { ... },然后访问http://localhost:8080 - 长期方案(推荐):用
sudo启动:sudo frankenphp run;但注意sudo下环境变量(如$HOME)会变,Caddyfile 必须用绝对路径或放在当前目录 - 不建议改
sysctl net.ipv4.ip_unprivileged_port_start,容易影响 WSL2 网络稳定性
最常被忽略的一点:WSL2 的 /etc/resolv.conf 有时会被 Windows DNS 设置污染,导致 FrankenPHP 内部调用(比如 Composer 检查更新、HTTPS 证书请求)超时。如果发现 frankenphp php-cli -r "print file_get_contents('https://api.github.com');" 失败,先运行 cat /etc/resolv.conf 看 nameserver 是否是 172.x.x.x ——不是的话,按 WSL2 官方文档重建它,别硬改。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











