“command not found”主因是终端未在项目根目录执行或php环境未正确配置:需确认当前目录存在artisan可执行文件、which php指向homebrew路径(如/opt/homebrew/bin/php)、且shell已加载.zshrc等配置以确保path生效。

直接在项目根目录运行 php artisan serve 即可启动开发服务器,但 macOS 上有几个关键点不处理好就会卡在“command not found”或“port already in use”。
为什么 php artisan serve 在 macOS 上报错 “Command not found”?
这不是 Laravel 的问题,而是终端没进对位置或 PHP 环境没配好:
- 必须在 Laravel 项目根目录下执行——用
ls -la | grep artisan确认当前目录存在artisan文件(不是artisan.php,是带 shebang 的可执行脚本) - macOS 默认没装 PHP,或装的是系统自带的过时版本(如 PHP 8.1 以下),
php --version输出低于 8.1 会触发 Laravel 10 兼容性警告甚至失败 - 如果用 Homebrew 安装了 PHP,确认
which php指向的是/opt/homebrew/bin/php(Apple Silicon)或/usr/local/bin/php(Intel),否则可能调用到系统旧版 - 某些终端(如 iTerm2 + zsh)启用插件后会干扰 PATH,临时用
env | grep PATH检查是否漏掉了 PHP 路径
php artisan serve 启动后访问不了 localhost:8000?
Laravel 10 默认绑定 127.0.0.1:8000,而 macOS 的 localhost 解析有时受 /etc/hosts 或网络设置影响:
- 先试
curl -I http://127.0.0.1:8000—— 如果返回 200,说明服务起来了,只是浏览器 DNS 解析异常 - 改用
php artisan serve --host=localhost --port=8000强制走 localhost 域名(注意:不是--host=0.0.0.0,那会暴露给局域网,开发时不推荐) - 若仍不行,检查是否有其他进程占了 8000 端口:
lsof -i :8000,然后kill -9 [PID] - Mac 自带的“防火墙”偶尔会拦截本地 loopback 流量,系统设置 → 隐私与安全性 → 防火墙 → 防火墙选项 → 关掉“阻止所有传入连接”(仅开发时临时关)
用 Laravel Sail 启动 Artisan 服务(推荐 macOS 开发者)
如果你用 laravel new 或 composer create-project 创建的 Laravel 10,默认已集成 Sail。它比原生 php artisan serve 更稳定,规避了 macOS 本地 PHP 版本、扩展缺失、GD/mbstring 缺失等常见坑:
- 确保项目根目录有
docker-compose.yml和.env(Sail 自动生成) - 运行
./vendor/bin/sail up -d启动容器,再./vendor/bin/sail artisan serve --host=0.0.0.0 --port=8000 - 此时服务实际跑在 Docker 容器内,但通过
http://localhost:8000可正常访问 —— 因为 Sail 已配置好端口映射和 Nginx 转发 - 后续所有 Artisan 命令都应走
./vendor/bin/sail artisan ...,包括migrate、等,避免本地环境和容器环境不一致
真正容易被忽略的是:Laravel 10 的 serve 命令依赖 <code>symfony/console 和 symfony/process,而这两个包在 macOS 上对 shell 字符编码、信号处理更敏感;一旦你在终端里按了 Ctrl+C 没彻底退出进程,下次 serve 就可能静默失败 —— 所以每次重启前,先 lsof -i :8000 | grep LISTEN | awk '{print $2}' | xargs kill -9 清干净。











