在本地使用Composer,然后通过FTP上传文件

时间:2016-12-19 14:32:06

标签: php composer-php

有点奇怪的设置,但遇到了一个项目,其中Composer已在本地环境中用于启动项目。原始开发人员没有对生产服务器的ssh访问权限,因此他在本地使用Composer并上传了供应商'使用FTP从桌面到服务器的目录。

我现在需要添加PHPMailer包,以便在我的Mac上本地完成以下操作:

cd Desktop/
composer require phpmailer/phpmailer

这在我的桌面上创建了以下结构:

Desktop/composer.json
Desktop/composer.lock
Desktop/vendor/autoload.php
Desktop/vendor/composer/*
Desktop/vendor/phpmailer/*

我需要通过FTP上传哪些内容?我意识到vendor/phpmailer/*是我想要的包,所以需要上传。

其他人怎么样?我已配置了自动加载器,因此此处不需要猜测vendor/autoload.php

composer.json我可以将软件包添加到已经存在的软件包中,例如

"require": {
    *other packages here*
    "phpmailer/phpmailer": "^5.2"
}

但我不确定这是否必要,因为我不会在服务器上使用ssh / Composer来运行任何更新?

2 个答案:

答案 0 :(得分:2)

通常的工作流程是:

  1. 从版本控制中签出当前版本。
  2. 通过命令行composer require new/package添加依赖项。
  3. 这将下载新软件包并更新自动加载。
  4. 在本地或测试网站环境中测试结果。
  5. 如果对结果满意,请将整个文件夹上传到生产服务器。
  6. 这个一般工作流程可能有几个例外:

    广告1:如果没有版本控制,您现在可能更好地启动本地git仓库,并将当前生产状态作为第一次提交下载到其中。没有版本控制会使事情变得更难,尤其是回到已知的工作版本。由于生产服务器上的文件可能不受管理,因此您还要将vendor文件夹签入新创建的版本控件中,以避免取消对这些文件所做的任何更改。

    广告2:如果您知道自己在做什么,手动编辑composer.json文件有时是获得所需内容的更快捷方式,但您必须正确编辑JSON。对我来说,如果我已准备好命令行,通常会有太多麻烦。该命令还将选择适合已安装的依赖项的匹配版本。手动编辑可能会导致您必须解开的版本冲突。请记住,只安装与生产中的PHP版本一起使用的依赖项。您可能应该运行composer config platform.php X.Y.Z以将PHP的生产版本添加到composer.json文件中,这会阻止Composer根据您的开发PHP安装依赖版本。添加-g开关会将此设置添加到您的全局(用户)设置中,这将影响您启动的所有作曲家操作,也适用于其他项目。

    广告3:手动编辑需要您在命令行上运行composer update,因此可能没有理由不改为composer require

    广告4:如何做到完全取决于您必须使用的环境。

    ad 5:在此阶段,您已经汇集了创建工作网站所需的所有文件。将它们上传到生产将始终导致工作网站,除非上传以某种方式失败。你也可以使用一些"先上传到临时文件夹,然后在服务器上移动"如果您担心FTP会不可靠,那就接近。有些人采取了不同的方法:他们在生产服务器上有一个git存储库,他们只需将应该存在的版本推送到该远程存储库。一些推后脚本将运行composer install。这种自动化方法也可以工作(但不使用FTP),但在部署期间出现故障的风险较高,并且可能没有简单的方法可以回到以前的情况。

    所以最后我说通过FTP上传整个文件夹结构(好吧,该协议本身不安全,最好用FTPS(带SSL的FTP),SFTP或SCP替换它)与运行相比更好生产服务器上的Composer。

    关于要上传哪些文件夹的具体问题:所有这些问题。特别是上传整个vendor文件夹。它包含当前的自动加载器和软件所需的所有依赖包。如果您正常工作,则将现有的composer.jsoncomposer.lock文件与其他所有文件一起下载并添加新的依赖项。这已经更改了这两个文件,将新包添加到vendor文件夹,将类添加到自动加载器。

    不要只上传vendor文件夹的部分内容,或手动编辑自动加载的组件。如果您不正确地执行某些方面,您只会为开发人员带来惊喜,而且还需要更多时间。 Composer是一个非常好的管理依赖项的工具 - 使用它!

答案 1 :(得分:1)

您可以将composer.json从服务器复制到本地服务器,添加需求并运行编辑器更新。

之后,您可以将所有文件(composer.json,composer.lock和vendor文件夹)复制到您的服务器中......

或者您可以将本地供应商/ phpmailer复制到服务器供应商文件夹,在vendor / composer / autoload_psr4.php中搜索phpmailer的条目,并将其添加到您的服务器vendor / composer / autoload_psr4.php。

使用此方法也会以相同的方式添加phpmailers依赖项。

composer depends phpmailer/phpmailer