离线环境下必须在联网机生成校验后的composer.phar并拷贝至目标机,设COMPOSER_DISABLE_NETWORK=1后执行composer install --no-plugins --no-scripts --no-autoloader,再运行dump-autoload -o;PHP版本、扩展及OS架构须与生成环境完全一致。

服务器断网时不能用 apt 或 curl 安装 Composer
因为 apt install composer 会尝试拉取 deb 包和依赖,curl -sS https://getcomposer.org/installer | php 会校验签名并请求远程元数据——断网后必然卡在 DNS 解析或连接超时。这些操作不是“偶尔失败”,而是设计上就依赖网络,离线环境下根本走不通。
- 别在断网服务器上运行任何带
https://的命令,包括php -r "copy('https://...')" - 也别指望
composer --version成功就代表能用——它只验证二进制可执行,不测网络行为 - 真正可用的 Composer 必须是预生成的、带完整哈希校验的
composer.phar文件,且 PHP 环境匹配
联网机上生成可执行的 composer.phar 是唯一正路
必须在与目标服务器一致的 PHP 版本(含扩展:mbstring、openssl、zlib)下执行,否则生成的 composer.phar 在离线机上可能报错或行为异常。
- 先下载安装脚本:
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" - 用官网当前 SHA384 哈希校验(2026年11月最新值为
e0012edf3e80b6978849f5eff0d4b4e4c79ff1609dd1f6a331a8365dfe33b4d8d826ad669113f128fd004e28787949af298b):php -r "if (hash_file('sha384', 'composer-setup.php') !== 'e0012edf3e80b6978849f5eff0d4b4e4c79ff1609dd1f6a331a8365dfe33b4d8d826ad669113f128fd004e28787949af298b') { unlink('composer-setup.php'); echo 'Integrity check failed'; exit(1); }" - 执行安装:
php composer-setup.php→ 生成composer.phar - 清理临时文件:
php -r "unlink('composer-setup.php');"
离线服务器上部署 composer.phar 要加权限、放对位置
拷贝过去只是第一步,没执行权限或路径不对,composer --version 仍会失败。
- 传到目标机后必须运行:
chmod +x composer.phar - 建议移到系统路径并创建软链:
mv composer.phar /usr/local/bin/composer(或ln -sf /path/to/composer.phar /usr/local/bin/composer) - 验证是否生效:
composer --version应输出版本号;再手动断网(如ip link set eth0 down),重试该命令——若仍成功,说明二进制本身已就绪
光有 composer 命令还不够,离线 install 必须配环境+参数
composer install 默认仍会尝试访问 https://repo.packagist.org/packages.json,哪怕 vendor/ 已存在、composer.lock 也完整。不干预就会报错。
- 硬性前置:
COMPOSER_DISABLE_NETWORK=1,否则所有--no-xxx参数都无效 - 必须组合使用:
COMPOSER_DISABLE_NETWORK=1 composer install --no-plugins --no-scripts --no-autoloader - 执行完立刻补一记:
composer dump-autoload -o,否则运行时大概率Class not found - 确认 PHP 版本、扩展、OS 架构与生成
composer.lock的环境完全一致,否则 autoload 映射可能失效
断网装 Composer 的关键不在“怎么下载”,而在于“谁来生成、在哪生成、怎么验证”。最容易被忽略的是:生成 composer.phar 的 PHP 环境必须与目标机一致,且 COMPOSER_DISABLE_NETWORK=1 不是可选项,是强制开关——漏掉任一环,install 阶段都会无声失败。











