报错含 vendor/autoload.php 说明 vendor/ 目录属主非当前用户,应先运行 ls -ld vendor/ 确认归属,若为 root root 则执行 sudo chown -R $USER:$USER vendor/ 修复所有权,并同步检查 composer.lock 和全局缓存目录归属。

报错里带 vendor/autoload.php 就修 vendor/ 目录
终端输出 file_put_contents(/path/to/vendor/autoload.php): Failed to open stream: Permission denied,说明 PHP 试图写入但被拒,根源几乎肯定是 vendor/ 目录属主不是当前用户。别急着删目录或改 chmod,先看归属:
- 运行
ls -ld vendor/,如果第一列显示root root,就是之前误用sudo composer install污染的 - 执行
sudo chown -R $USER:$USER vendor/归还所有权($USER会自动展开为你当前用户名) - 顺手检查
composer.lock:若ls -ld composer.lock也显示属主是 root,一并修复:sudo chown $USER:$USER composer.lock - 修复后必须删掉
vendor/和composer.lock,再用普通用户重跑composer install
全局命令 laravel 或 phpunit 找不到?查 bin-dir 和 PATH
composer global require laravel/installer 成功,但输 laravel 提示 command not found,问题不在安装失败,而在路径没暴露给 shell:
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 查 bin 目录在哪:
composer config -g bin-dir,默认是~/.composer/vendor/bin - 确认该路径归属:
ls -ld $(composer config -g bin-dir),若属主非你,执行sudo chown -R $USER:$USER $(composer config -g bin-dir) - 确保它已加入
$PATH:在~/.zshrc或~/.bashrc中加一行export PATH="$HOME/.composer/vendor/bin:$PATH",然后source ~/.zshrc - 更稳妥的做法是把 bin-dir 改到你完全可控的位置:
mkdir -p ~/bin && composer config -g bin-dir ~/bin && export PATH="$HOME/bin:$PATH"
缓存写入失败提示 Writing cache file?定位 ~/.composer/cache
报错含 Writing cache file ~/.composer/cache/repo/https---packagist.org/,说明全局缓存目录被 root 占了,这是 sudo composer global require 的典型后遗症:
- 先确认缓存路径:
composer config --global cache-dir - 查归属:
ls -ld $(composer config --global cache-dir) - 若属主不是你,执行
sudo chown -R $USER:$USER $(composer config --global cache-dir) - 清理残留:
composer clear-cache(此时不应再报错) - 极端情况整个
~/.composer都属 root:sudo chown -R $USER:$USER ~/.composer
Docker 或 CI 环境里权限卡住?重点看 UID 和挂载点
本地好使、CI 或容器里报 Permission denied,大概率是用户 ID 错位,而非权限数字本身不对:
- Docker 构建时别用
USER root后直接跑composer install;应在Dockerfile里切到非 root 用户,例如USER 1001 - 宿主机挂载卷(volume)必须对容器内 UID 可写,必要时提前在宿主机执行
chown 1001:1001 /host/path - GitHub Actions 中,若
actions/checkout后立即失败,加一步:sudo chown -R $GITHUB_ACTOR /github/workspace - 某些 Alpine 镜像中,
/tmp权限异常也会导致缓存写失败,可提前chmod 777 /tmp临时绕过(仅限 CI)
sudo composer install 可能让 vendor/ 下混进个别 root 所有子目录,ls -la vendor/ 才能发现;修复时不能只改顶层目录,得用 -R 递归。

















