离线模式下仍报SSL错误,说明COMPOSER_DISABLE_NETWORK=1未生效或被绕过;必须提前设置该环境变量,清除全局镜像(composer config --global repo.packagist false),并强制使用--no-plugins、--no-scripts等参数阻断所有联网路径。

离线模式下还报证书错误,说明 COMPOSER_DISABLE_NETWORK=1 没生效,或者被其他配置绕过了——证书错误本身是假象,真实问题是 Composer 仍在偷偷联网。
为什么设了离线模式还走 HTTPS 请求?
根本原因不是证书错,而是离线开关没真正起作用:
-
COMPOSER_DISABLE_NETWORK=1必须在运行composer install前就设置好,且对当前 shell 会话有效;CMD 中用set COMPOSER_DISABLE_NETWORK=1,PowerShell 中用$env:COMPOSER_DISABLE_NETWORK="1",Linux/macOS 用export COMPOSER_DISABLE_NETWORK=1 - 如果已设但仍有
SSL certificate problem或cURL error 60,说明 Composer 还在发请求——大概率是残留了全局镜像:composer config --global repo.packagist若返回非false的 URL,必须立刻执行composer config --global repo.packagist false -
composer config -g secure-http false或--no-secure-http在离线模式下完全无效,它们只影响仓库协议策略,不阻止元数据校验逻辑
离线 install 的最小安全命令组合
这组参数不是“可选优化”,而是防止意外联网的硬性防护线:
- 必须前置环境变量:
COMPOSER_DISABLE_NETWORK=1 - 必须加
--no-plugins:某些插件(如phpstan/extension-installer)会在外部触发网络调用,--no-plugins不是建议项,是必须项 - 必须加
--no-scripts和--no-autoloader:避免脚本中隐含的file_get_contents或curl_exec调用 - 执行完后立刻补
composer dump-autoload -o,否则运行时必报Class not found
哪些锁文件天生不支持离线?
不是所有 composer.lock 都能在离线环境用:
- 若锁文件里存在
"source": {"type": "git", ...}字段,composer install会尝试 clone 或 fetch,离线必然失败 - 若依赖中用了
"type": "path"仓库,对应目录下必须有合法composer.json,且name和version(或dev-分支标识)完整,缺一不可 - 锁文件由
composer update生成时若连过远程源,可能混入不可离线的元数据;稳妥做法是:在联网机器上用完整 vendor + 正确 lock 文件打包,再复制到离线机
真正要防的不是证书错误,而是 Composer 在你没察觉时发起 HTTPS 请求。离线场景下,“跳过证书验证”是伪命题——它解决不了根本问题,反而掩盖了配置失效的事实。


















