如何在PHP项目中使用aws包而不使用composer?

9nvpjoqh  于 2023-04-19  发布在  PHP
关注(0)|答案(1)|浏览(148)

我有一个普通的PHP项目,它使用composer来安装软件包,但composer.json文件已经不存在了。vendor文件夹包含所有当前使用的软件包和autoload.php文件。
现在我需要安装并使用aws package,但是一旦我运行composer require命令,所有旧的软件包都会从供应商那里删除。当我从备份中恢复它们时,它们无法工作。应用程序不再识别它们。
如何在这种情况下使用aws包或任何其他包?

define('ROOT_PATH', realpath(__DIR__ . '/..') . '/');
const APP_PATH = ROOT_PATH . 'app/';
const PLUGINS_PATH = ROOT_PATH . 'plugins/';
const THEME_PATH = ROOT_PATH . 'themes/altum/';
......
OTHER LOGIC AND CONSTANTS HERE
......
require_once APP_PATH . 'helpers/Affiliate.php';
/* Autoload for vendor */
require_once ROOT_PATH . 'vendor/autoload.php';

我尝试下载aws文件夹并将其复制到vendor文件夹,然后在PHP文件中:

use Altum\Middlewares\Csrf;
use Altum\Title;
use Aws\S3\S3Client;

但我得到一个错误

PHP Fatal error:  Uncaught Error: Class 'Altum\Controllers\Aws\S3\S3Client' not found
byqmnocz

byqmnocz1#

每个项目可以有多个composer配置。这不是标准设置,但也是可能的。在您的情况下,它甚至可以帮助您解决问题,因为您现在不需要恢复旧的composer.json文件。
相反,composer.json文件的丢失被忽略,供应商被保留。即:
您拥有的第一个composer配置是之前的配置,也就是您丢失了 composer.json 文件的配置。但是您仍然拥有vendor文件夹,包括所有依赖项和元数据,如vendor/composer/installed.json。由于您丢失了 composer.json 文件,您现在应该完整地存储vendor文件夹。如果您使用的是git,你可能需要检查你的.gitignore文件,并将/vendor/条目替换为/vendor-aws/,这样以前的vendor文件夹就不再被忽略,你可以将所有依赖项作为git子树放在配置管理下。

第二个composer配置是我们要创建的配置。它几乎是默认的,只是供应商目录1不同。我们称之为vendor-aws,而不是默认名称vendor。我们从 * 第一个composer配置 * 添加autoloader 2,因为第二个配置继承了第一个配置:

{
  "autoload": {
    "files": ["vendor/autoload.php"]
  }
  "config": {
    "vendor-dir": "vendor-aws"
  } 
}

验证这个新的composer.json文件并提交它。之后,需要aws和其他你想要的软件包。
将您的新配置发送到测试并集成它,也许已经工作了。
这应该会继续工作,直到旧的供应商变得不可维护。但在此之前,您可能已经将所有依赖项添加到新的composer配置文件中,并重新构建供应商文件夹开关。
请记住,vendor/composer/installed.json仍然会提供已安装的列表,因此您仍然需要识别主要软件包(因为该列表包含 * 所有 * 软件包,包括依赖项),但您可以在新配置中通过require/remove轻松测试它们。

  1. https://getcomposer.org/doc/06-config.md#vendor-dir
  2. https://getcomposer.org/doc/04-schema.md#autoload

相关问题