不能直接在生产服务器运行 composer install,因生产环境常禁用 shell、缺 PHP CLI 或扩展(如 openssl/zlib),导致 Command "install" 未定义或网络解析失败;必须本地构建并严格使用 --no-dev --optimize-autoloader --no-interaction 三参数,rsync 同步时需排除 .git 和各类 tests 目录,但保留 autoload_*.php,并验证 vendor/autoload.php 可被成功 require。
为什么不能直接在生产服务器运行
因为生产服务器常禁用 shell 访问、无 PHP CLI 环境、缺扩展(如
、
),或被安全策略限制执行外部命令。硬上会报错,比如:
或
——根本连不上 Packagist。
本地构建必须用
这三参数不是可选项,是防止线上出问题的底线:
:跳过
里的包(如 PHPUnit、phpstan),避免把开发工具打进生产环境
:生成扁平化
,减少
查找开销,启动快 20%+(尤其 Laravel/Symfony 项目)
:禁掉所有交互提示(比如是否启用插件),否则 CI/脚本会卡住
正确命令:
。漏掉任一参数,都可能让同步后的代码跑不起来或性能异常。
rsync 同步时要排除哪些目录和文件?
直接
是危险的——会把本地调试痕迹、临时文件甚至 .git 目录一起推上去。
Composer 2.9.6
Composer 2.9.6 是 PHP 生态中高效、稳定的依赖管理工具。此版本在性能与兼容性上进一步优化,改进了依赖解析算法,提升大型项目中的安装与更新速度。它支持并行下载任务,显著减少等待时间,并增强了与私有仓库及镜像源的交互稳定性。同时修复了多项命令行交互与内存使用相关的缺陷,确保在复杂依赖关系下依然可靠运行。无论是新项目初始化还是现有系统维护,Composer 2.9.6 都能为开发者提供流畅、精准的依赖管理体验。
下载
必须排除:
(体积大,且无意义)、
(测试代码无需上线)
建议排除:
、
、
(大小写不敏感场景下漏掉小写 test 会导致误传)
别忽略:
—— 这些是
生成的,必须随 vendor 一起同步,否则
推荐 rsync 命令片段:
部署后还要检查
是否可 require
常见坑:本地 PHP 版本是 8.2,生产是 7.4,但
没加
,导致某些包降级失败,autoload.php 里引用了不存在的类。
上线后第一件事:在生产机上跑
如果报
或
,说明本地构建环境和生产 PHP 版本/扩展不一致
补救方法:本地用和生产一致的 PHP 版本重装依赖(如
)
autoload.php 不是“存在就行”,它得能被 PHP 成功解析并注册自动加载器——这是整个依赖链最脆弱的一环。
composer installopensslzlibCommand "install" is not definedfile_get_contents(): php_network_getaddresses: getaddrinfo failed--no-dev --optimize-autoloader --no-interaction--no-devrequire-dev--optimize-autoloaderautoload_classmap.phpclass_exists()--no-interactioncomposer install --no-dev --optimize-autoloader --no-interactionrsync -av ./vendor/ user@prod:/var/www/app/vendor/vendor/.gitvendor/*/Testsvendor/*/testsvendor/*/testvendor/*/phpunit.xml*vendor/composer/autoload_*.phpcomposer dump-autoloadClass not foundrsync -av --exclude='.git' --exclude='*/Tests' --exclude='*/tests' ./vendor/ user@prod:/var/www/app/vendor/autoload.phpcomposer install--ignore-platform-reqsphp -r "require 'vendor/autoload.php'; echo 'OK';"ParseErrorClass not founddocker run --rm -v $(pwd):/app -w /app php:7.4-cli composer install ...