可靠迁移PHP项目须只传composer.json、composer.lock和业务代码目录,删掉vendor后在新服务器执行composer install --no-dev --optimize-autoloader,并确保PHP版本、扩展、磁盘空间及.env配置正确。

直接复制 vendor 目录过去,大概率会出问题——尤其是跨平台(如 macOS → Linux)、PHP 版本不一致、或启用了 opcache.preload 等场景。真正可靠的迁移方式是只传源码和锁文件,重装依赖。
必须保留的三个文件/目录
迁移前确认以下内容已完整拷贝到新服务器:
-
composer.json:定义项目依赖和脚本 -
composer.lock:锁定所有依赖的确切版本和哈希值,这是可重现安装的关键 -
src/、app/等业务代码目录(不含vendor)
删掉 vendor/ 和 composer.phar(如果本地有),不要传它们。
新服务器上执行 composer install 而非 update
composer install 会严格按 composer.lock 安装,保证与原环境一致;而 composer update 会忽略锁文件、拉取最新兼容版本,极易引入不兼容变更。
执行前请检查:
- PHP 版本是否 ≥
composer.json中"php": "^8.1"等声明(用php -v确认) - 已安装所需扩展,如
mbstring、curl、openssl(常见报错ext-mbstring missing就卡在这) - 磁盘空间充足(
vendor/解压后可能比压缩包大 2–3 倍)
cd /var/www/my-project composer install --no-dev --optimize-autoloader
--no-dev 跳过开发依赖(如 PHPUnit),生产环境必需;--optimize-autoloader 生成静态映射,提升性能。
常见失败原因和对应解法
遇到安装中断,先看错误关键词,再针对性处理:
-
Could not fetch https://repo.packagist.org/packages.json:新服务器无法访问 Packagist,检查网络、DNS 或临时换镜像:composer config repo.packagist composer https://packagist.phpcomposer.com -
Failed to extract vendor/package: unable to unzip:磁盘空间不足或unzip命令缺失,运行apt install unzip(Debian/Ubuntu)或yum install unzip(CentOS) -
Class XXX not found即使安装成功:可能是 autoloader 没刷新,删掉vendor/autoload.php上方的vendor/composer/autoload_*.php文件,再重跑composer install -
Package container-interop/container-interop is abandoned:只是警告,不影响安装,可忽略;若想消除,升级对应依赖或在composer.json加"minimum-stability": "stable"
敏感配置不要进 Git,用 .env + dotenv 隔离
数据库密码、API 密钥等绝不能随 composer.json 一起迁移。确保使用 vizcay/laravel-dotenv-editor 或原生 vlucas/phpdotenv,把配置抽到 .env,并确认该文件已加入 .gitignore。
新服务器部署后手动创建 .env,内容示例:
APP_ENV=production DB_HOST=127.0.0.1 DB_USER=homestead DB_PASSWORD=secret
别忘了设权限:chmod 600 .env,避免被 Web 服务直接读取。
最常被跳过的一步是验证 composer.lock 是否真的被提交——很多人本地 git status 没注意它被忽略了,结果新服务器装了一堆新版依赖,行为突变。迁之前,盯一眼 git ls-files | grep lock。










