WSL环境下启动PHP内置服务的Bash函数卡住无法打开浏览器问题
问题根因
Bash 默认同步执行命令,前一条命令完全执行退出后才会运行下一条。你定义的函数中php -S localhost:"$1"是前台阻塞运行的,进程会持续挂起监听请求,不会主动退出,因此后续的浏览器启动命令根本没有执行机会。只有你手动终止PHP进程后,第二条命令才会触发,自然此时PHP服务已经关闭,无法正常访问。
修复后的自定义函数
只需要把PHP启动命令放到后台运行即可,修改.bashrc中的函数代码如下:
phpLocal(){ # 末尾加 & 表示将PHP服务放到后台运行,不阻塞后续命令 php -S localhost:"$1" & # 可选:加0.5秒延迟,确保PHP服务启动完成再打开浏览器,避免刚打开时访问失败 sleep 0.5 cmd.exe /C start http://localhost:"$1" }
修改完成后执行source ~/.bashrc让配置生效,再运行phpLocal 8200即可符合预期运行。
补充说明
如果后续需要停止对应端口的PHP后台服务,可以执行以下命令:
# 把8200替换为你实际使用的端口即可 lsof -t -i:8200 | xargs kill -9
内容的提问来源于stack exchange,提问作者Wally
相关产品推荐
相关产品推荐

