composer应装入$home/bin并添加至path前端,确保php≥7.2.5且路径正确,vendor目录需属当前用户,缓存目录可设为$home/.composer/cache。

直接装到家目录,别碰系统路径
Composer 本身不依赖 root 权限,只要你的用户有写入权限的目录(比如 $HOME/bin 或 $HOME/.local/bin),就能完成安装。关键不是“能不能装”,而是“装到哪、PATH 能不能找到它”。很多失败源于硬往 /usr/local/bin 写,或者没把自定义 bin 目录加进 PATH。
- 推荐路径:先创建
$HOME/bin(如果不存在),然后把 Composer 可执行文件放进去 - 执行
curl -sS https://getcomposer.org/installer | php -- --install-dir=$HOME/bin --filename=composer - 确认
$HOME/bin在PATH前段:检查echo $PATH输出是否包含它;没包含就加到~/.bashrc或~/.zshrc末尾:export PATH="$HOME/bin:$PATH",然后source ~/.bashrc
php 命令必须可用,且版本 ≥ 7.2.5
Composer 是 PHP 脚本,不是二进制,所以宿主环境必须有可用的 php 命令。共享主机或老旧服务器常预装低版本 PHP,或者 php 不在默认 PATH 中——这时 curl | php 会直接报错“command not found”或“PHP version too old”。
- 先运行
php -v确认版本;若提示未找到,尝试which php或查服务器文档找 PHP 实际路径(比如/opt/php74/bin/php) - 如果 PHP 版本太低(如 5.6),无法升级系统 PHP 时,可下载新版 PHP 二进制(如 php.net 的 Linux CLI 包),解压后指定路径运行:
/path/to/php74/bin/php composer-setup.php - 安装脚本默认用系统
php,不识别php74这类别名,必须显式调用完整路径
vendor 目录权限问题:别让 Composer 写失败
即使 Composer 装好了,composer install 仍可能卡在 “failed to open stream: Permission denied” —— 这通常不是 Composer 自身权限问题,而是当前用户对项目目录或 vendor/ 下子目录无写权限。尤其在某些托管环境(如 cPanel、Plesk)中,Web 服务器用户(如 nobody 或 apache)和你的 SSH 用户不同,而 vendor/ 里部分文件被其他用户创建过。
- 执行前先清理:
rm -rf vendor composer.lock,确保从干净状态开始 - 用
ls -la检查项目根目录所有权;如果属其他用户(如www-data),用chown -R $USER:$USER .收回控制权(仅限你有权限改的目录) - 避免在 Web 可写目录(如
public_html)直接跑composer install;建议在$HOME/myproject完成安装,再用符号链接或 rsync 部署到 Web 目录
全局配置和缓存也走用户目录,别指望 /tmp
Composer 默认把全局配置存在 ~/.composer/,缓存存在 ~/.composer/cache/。但有些服务器限制 /tmp 写入或自动清理,而 Composer 在初始化时可能临时用到它。如果遇到 “Could not write to /tmp” 类错误,不是要提权,而是该告诉 Composer 换个地方落脚。
- 设置环境变量避开系统
/tmp:export COMPOSER_CACHE_DIR="$HOME/.composer/cache"(加到 shell 配置里更稳妥) - 检查配置是否生效:
composer config --global cache-dir应输出你设的路径 - 如果公司或学校服务器禁用了
proc_open()(常见于 Suhosin 或 PHP 安全模块),Composer 会拒绝运行某些命令(如create-project);此时只能联系管理员,或改用--no-scripts和手动安装替代方案
事情说清了就结束。最常卡住的地方不是 Composer 本身,而是 PHP 可执行路径没对上、PATH 没刷进当前 shell、或者 vendor/ 目录混入了其他用户的残留文件——这三处多看一眼 ls -l 和 echo $PATH,比重装十次都管用。










