根本原因是macos对php cli脚本的双重限制:artisan缺少执行权限(-rwxr-xr-x)且被gatekeeper标记为“已损坏”;需依次执行chmod +x artisan、右键“打开”放行、确认which php指向homebrew路径(如/opt/homebrew/bin/php)、禁用xdebug并确保php版本为7.4.x。

php artisan list 报 Permission denied 怎么办
根本原因不是 Laravel 本身,而是 macOS 对 PHP CLI 脚本执行的双重限制:可执行位丢失 + Gatekeeper 拦截。直接现象是运行 php artisan list 时提示 Permission denied 或弹窗“已损坏,无法打开”。
- 先检查
artisan是否有执行权限:ls -l artisan→ 必须看到-rwxr-xr-x开头;若无x,立刻执行chmod +x artisan - 若仍弹窗“已损坏”,说明 Gatekeeper 标记了该文件:右键
artisan→ “打开” → 点“打开”(仅首次需手动放行) - 确认
php命令调用的是 Homebrew 版本:which php应输出/opt/homebrew/bin/php(Apple Silicon)或/usr/local/bin/php(Intel);若为/usr/bin/php,执行brew unlink php@7.4 && brew link php@7.4(Laravel 5.4 推荐 PHP 7.4)并重启终端
composer create-project laravel/laravel . --no-install 卡住不动
这不是网络超时,而是 Laravel 5.4 的依赖解析器在 macOS 下与旧版 Composer 冲突,尤其当系统残留 PHP 扩展(如 Xdebug)时,CLI 会静默等待调试器连接,表现为光标闪烁、无任何输出。
- 临时绕过 Xdebug:
php -d xdebug.mode=off composer create-project laravel/laravel myapp "5.4.*" - 确保 Composer 是 Homebrew 安装的最新兼容版:
brew install composer,避免用 PHP 自带的php -r "copy(...)"方式安装(易出权限和路径问题) - Laravel 5.4 不支持 PHP 8+,若已升级 PHP,请切回 7.4:
brew install php@7.4 && brew unlink php && brew link php@7.4
安装完访问 public/ 显示 404 或 “No input file specified”
核心是 Apache 的 mod_rewrite 未启用,或虚拟主机配置中 AllowOverride 被禁用——Laravel 5.4 严重依赖 .htaccess 重写规则来路由请求。
- 启用 rewrite 模块:
sudo vim /etc/apache2/httpd.conf,取消注释这行:LoadModule rewrite_module libexec/apache2/mod_rewrite.so - 修改虚拟主机配置:
sudo vim /etc/apache2/extra/httpd-vhosts.conf,确保对应Directory块包含:AllowOverride All和Require all granted - 重启 Apache:
sudo apachectl restart;若仍 404,检查public/.htaccess是否存在且内容完整(Laravel 5.4 默认自带)
APP_ENV=local 却显示 production
这是 Laravel 5.4 的常见幻觉——它不读取系统环境变量,只认项目根目录下的 .env 文件,且对格式极其敏感。一旦格式错,就静默回退到 production。
- 检查
.env是否真实存在:ls -a | grep .env;若缺失,复制.env.example并重命名为.env - 检查等号两侧不能有空格:
APP_ENV = local❌,必须是APP_ENV=local✅ - 运行
php artisan env(Laravel 5.4 不支持该命令,得用php artisan tinker后输入app()->environment()验证) - 若之前执行过
php artisan config:cache,改完.env后必须清缓存:php artisan config:clear,否则永远读不到新值
php -v 显示 7.4.33+ 或 8.x,即使其他所有步骤都对,artisan 也会在加载阶段崩溃而无明确报错。











