根本原因是macos对cli可执行文件的权限控制逻辑变化;需依次检查which php路径是否为homebrew版、artisan是否含x权限、gatekeeper是否标记“已损坏”、.env文件是否存在,以及xdebug是否导致php artisan serve挂起。

php artisan 命令报 command not found 或 Permission denied
根本原因不是 Laravel 本身,而是 macOS 对 CLI 可执行文件的权限控制逻辑变了。常见现象包括:终端直接输 php artisan list 报 command not found,或执行时弹出“已损坏,无法打开”提示,甚至 chmod +x artisan 后仍提示 Permission denied。
关键检查点:
- 运行
which php,确认输出是 Homebrew 路径(如/opt/homebrew/bin/php),而非系统自带的/usr/bin/php;若不对,执行brew link php@8.3(以你实际安装版本为准)并重开终端 - 检查
artisan文件权限:ls -l artisan,必须含x(如-rwxr-xr-x);若无,运行chmod +x artisan - 若仍弹窗报“已损坏”,说明 Gatekeeper 标记了该文件:右键
artisan→ “打开”,在弹窗中点“打开”(仅首次生效);更稳妥做法是删掉它,用curl -o artisan https://raw.githubusercontent.com/laravel/laravel/11.x/artisan重新拉取
php artisan key:generate 报 file_get_contents(.env): failed to open stream
这不是权限问题,而是项目根目录下压根没有 .env 文件。Laravel 11 不再自动生成 .env,只提供 .env.example 模板。
正确操作顺序:
- 先确认当前目录是项目根目录(含
artisan、composer.json、.env.example) - 复制模板:
cp .env.example .env - 再生成密钥:
php artisan key:generate - 如果报错
file_get_contents(/path/to/.env)且路径里出现 Windows 风格(如D:\),说明你之前在 Windows 环境下生成过配置,或用了跨平台编辑器残留路径——直接删掉.env重来
php artisan serve 卡住、光标闪烁无输出
这是 macOS 下最隐蔽的阻塞点,通常和 Xdebug 或 opcache 的 CLI 模式冲突有关,不是 Laravel 启动慢,而是 PHP 进程被挂起等待调试连接。
快速定位方法:
- 运行
php -m | grep -E "(xdebug|opcache)",若输出含xdebug,大概率就是它 - 临时绕过:
php -d xdebug.mode=off artisan serve;若立刻启动成功,说明 Xdebug 配置触发了xdebug.start_with_request=1 - 检查全局 ini:运行
php --ini找到加载的配置路径,打开对应php.ini,确认xdebug.mode不是debug,且xdebug.start_with_request是0或注释掉 - 顺手检查
PHP_INI_SCAN_DIR:env | grep PHP_INI_SCAN_DIR,若指向错误目录(比如指向了 MAMP 的 ini),unset 它:unset PHP_INI_SCAN_DIR
Laravel 11 安装器全局命令 laravel new 报 command not found
这个命令依赖 Composer 全局 bin 目录加入 PATH,macOS 上默认不自动生效,尤其用 zsh 或 oh-my-zsh 的用户容易漏掉这步。
必须完成的操作:
- 确认已执行
composer global require laravel/installer - 查 Composer 全局 bin 路径:
composer global config bin-dir --absolute,典型输出是/Users/xxx/.composer/vendor/bin - 把该路径加进 shell 配置:对 zsh 用户,编辑
~/.zshrc,追加一行export PATH="$HOME/.composer/vendor/bin:$PATH";然后source ~/.zshrc - 验证:
echo $PATH应含该路径;再输laravel,应显示帮助信息
注意:Laravel 11 推荐直接用 Composer 创建项目(composer create-project laravel/laravel myapp),比安装器更可控;而 laravel new 本质是下载预打包 zip,若网络不稳定或 GitHub 限速,反而更容易中途失败。











