laravel 10 在 macos 上安装失败主因是系统自带 php(/usr/bin/php)受 sip 限制且不满足 8.1+ 要求,须改用 homebrew 安装的 php@8.1 或更高版本,并正确配置权限与组策略。

直接说结论:Laravel 10 在 macOS 上安装失败,90% 是因为 php 调用的是系统自带 PHP(/usr/bin/php),而它被 SIP 限制、无写入权限、缺扩展,且不支持 Laravel 10 所需的 PHP 8.1+。别修目录权限,先换 PHP。
确认你用的是 Homebrew PHP,不是 macOS 自带的
运行 which php,如果输出是 /usr/bin/php,立刻停手——这个版本连 mbstring 都可能没编译进去,laravel new 或 composer create-project 必然报 “PHP extension missing” 或卡死。
- 执行
brew install php@8.1(Laravel 10 最低要求)或php@8.2 - 然后运行
brew unlink php && brew link php@8.1(Apple Silicon 用户路径为/opt/homebrew/bin/php) - 关掉终端重开,再跑
php -v和php -m | grep mbstring,必须看到 8.1.x 和模块名
artisan 命令执行失败:不是 Laravel 错,是 macOS Gatekeeper 拦了脚本
即使 PHP 版本对了,php artisan key:generate 或 php artisan vendor:publish 报 “Permission denied” 或弹窗提示“已损坏,无法打开”,大概率是 artisan 文件被 Gatekeeper 标记为不可信——尤其当你从 ZIP 解压、Git clone 或远程复制过来时。
- 先检查权限:
ls -l artisan,确认有x(如-rwxr-xr-x);没有就chmod +x artisan - 仍有弹窗?右键
artisan→ “显示简介” → 底部点“放开锁定”,或更直接:右键 → “打开”,在弹窗里点“打开”(仅首次) - 终极保险:删掉本地
artisan,用官方最新版覆盖:curl -s https://raw.githubusercontent.com/laravel/laravel/10.x/artisan -o artisan && chmod +x artisan
storage 和 bootstrap/cache 写入失败:别用 chown -R $USER 硬改
Laravel 10 的 Artisan 命令和 Web 请求(比如 Valet 或 PHP-FPM)常以不同用户身份运行:$USER 启动命令行,但 Web 服务默认用 _www 或 www-data。直接 chown -R $USER 会导致 Web 访问时 500 错误。
- 正确做法是让两个用户共用一个组(macOS 默认
staff组包含你和_www):sudo chgrp -R staff storage bootstrap/cache - 再开放组写权限:
sudo chmod -R g+rws storage bootstrap/cache(s保证新建文件继承组) - 验证:
ls -ld storage应显示drwxrwsr-x,第三段是rws不是rwx
vendor:publish 报 “Unable to write to directory”:目标路径不存在 or 属主是 root
第三方包(如 spatie/laravel-permission)的 vendor:publish 命令默认往 config/、database/migrations 写文件。如果这些目录属主是 root(常见于 sudo composer install 后残留),普通用户就写不进。
- 查问题目录:
ls -ld config database/migrations,若显示root:wheel,就是它 - 修复(不加
sudo):sudo chown -R $USER:staff config database/migrations - 顺手清缓存:
php artisan config:clear && php artisan cache:clear,避免旧权限缓存干扰
最易被忽略的一点:不要在项目根目录外用 sudo 运行任何 php artisan 命令。它会让生成的文件属主变成 root,后续所有操作都得加 sudo,形成死循环。Mac 的权限问题,本质是用户、组、SIP 三层机制咬合的结果,绕开任意一层都会反复踩坑。











