ChatGPT解决这个技术问题 Extra ChatGPT

如何在没有 Composer 的情况下安装 Composer PHP 包?

我正在尝试安装 Coinbase PHP API,但它需要 Composer:

https://github.com/coinbase/coinbase-php

我正在寻找一个通用的 PHP 解决方案(可能是一个函数),让我可以将 composer 包直接安装到我的服务器上,而无需使用 Composer。

我认为 Composer 的开发人员相信他们正在帮助人们,但实际上有成千上万的初学者开发人员因为“Composer 障碍”而无法学习 Web 开发。

如果有一个灵活的解决方案或某种方法可以在没有 Composer 的情况下安装,那真的会有所帮助吗?我怎样才能做到这一点?

请不要回复一些讽刺的评论。有些人不想使用 Composer,我不明白为什么我们应该被赶到特定的第三方软件中来进行 Web 开发。

所有使用 composer 的包仍然只是一个充满 PHP 文件的目录。您可以按照与 composer 存在之前完全相同的方式安装它们:将它们复制到某处并include这些文件。
基于 Composer 的安装意味着运行一个命令,该命令几乎总是显示在包主页中。我知道有手动安装的用例,但它永远不会是更简单的方法。
@ÁlvaroGonzález 我完全不同意您的评论。请参阅:okmaya.com/2016/03/13/package-managers-hate-npm-composer。我并不是说包管理器不适合某些人和项目——只是他们通常需要更多的工作和努力,而不是简单地在项目中放置一个文件夹并引用它。
@dallin 尽管标题如此,那篇文章主要是对现代过度设计的框架和工具链(它本身的问题)的咆哮。如果你想安装一个恰好有 30 个依赖项的库,放弃 Composer 以支持 30 个手动安装可以让你感觉更有男子气概或其他什么,但我不会说它更容易,更不用说对于初学者开发人员了。
@ÁlvaroGonzález 老实说,我不必安装具有 30 个依赖项的库(听起来设计不佳)。我敢肯定,如果没有包管理器,这将是一场噩梦。我的经历与那篇文章相似。我通常会尝试安装具有一两个依赖项的东西,最终不得不在开始编码之前花时间解决包管理器的问题。错误消息太频繁了,而且非常模糊和深奥。这可能更能说明我的感受:imgur.com/r/webdev/bO7oTf6。我与 PM 的经历相似。

j
jahajee.com

您可以尝试 https://php-download.com/,它可以帮助您在大多数情况下连同 vendor 文件夹一起下载所有依赖项。它保证不需要作曲家。我自己试过了。它会查找并创建所有必需的文件夹并将其压缩以供下载。完美运行!


完美运行!谢谢 !!
这应该是公认的答案。它只是做作曲家所做的,然后返回一个 zip
上面的答案告诉了很多步骤,而网站将其简化为 1 个可下载的步骤。我不是专业的程序员,但 PHP 让我可以轻松地做一些疯狂的事情,以至于我从来不需要学习 SSH 或作曲家或包……这些是为极客和专业人士准备的……该网站消除了这一限制…… ...我相信所有支持我的答案的人都会发现该网站比作曲家做得更好.....如果你能做到......它将帮助所有非极客程序员
不幸的是,php-download.com 现在要求您订阅他们的网站才能实际使用它:(
该网站现在似乎需要付费订阅才能下载任何内容。
Á
Álvaro González

composer.json file 列出了依赖项。在您的示例中:

"require": {
    "php": ">=5.5.0",
    "guzzlehttp/guzzle": "^6.0",
    "psr/http-message": "^1.0",
    "psr/log": "^1.0"
},

然后,您必须在 packagist 站点中找到相应的软件包。对每个依赖项重复相同的过程:在其对应的 composer.json 文件中找到其他依赖项并再次搜索。

当您最终获得所需软件包的完整列表时,您只需将它们一一安装即可。在大多数情况下,只需将文件放在项目目录中的某个位置即可。但是您还必须确保 PHP 可以找到所需的类。由于您没有使用 Composer 的自动加载器,因此您需要将它们添加到您自己的自定义自动加载器中。您可以从各自的 composer.json 文件中找出信息,例如:

"autoload": {
    "psr-4": { "Coinbase\\Wallet\\": "src/" }
},

如果您不使用类自动加载器,则需要找出各个 require_once 语句。您可能需要大量的试验和错误,因为大多数图书馆作者不会关心记录这些。

另外,以防万一对此感到困惑:

Composer 具有适用于 Windows 的官方 GUI 安装程序和适用于所有平台的复制和粘贴命令行安装过程。

Composer 可以在本地运行,它的输出只是上传到其他地方。您的共享主机不需要 SSH。

安装库所需的命令可以从包网站复制和粘贴——即使包维护者不想记录它,packagist.org 默认会生成它。

Composer 并不完美,它并不适合所有用例,但是在安装依赖它的库时,它无疑是最好的选择,而且是一个相当不错的选择。

我已经检查了我之后的其他答案。它们主要分为两类:

安装库并使用它编写自定义下载脚本 为 Composer 使用基于 Web 的在线界面

除非我遗漏了什么,否则他们都没有解决 OP 表达的抱怨:

学习曲线

使用第三方软件

可以在服务器上进行开发(我想使用 SSH)

潜在的深度依赖树


如果这不能说服每个人只使用作曲家,什么都不会……
首先,当前版本的作曲家需要 proc_open() ,但它并非随处可用。还有其他问题。虽然我同意作曲家有其优点,但我一直都知道我总有一天会遇到问题,而这一天就是这样。我还没有弄清楚如何为 50 多个客户端应用程序安装共享库(使用 Composer)。
我希望图书馆开发人员停止使用作曲家。在任何严肃的生产环境中都是不可取的。躲在“只使用作曲家”后面的人一开始不知道他们在做什么。
用JS笑
我认为@ObedMarquezParlapiano 想说的是包管理只是解决项目依赖关系的工具,而对前者的抱怨通常是由后者引起的,因为至少 PHP 事实标准工具是相当可靠的,就像任何人一样为 Node.js 的 NPM 苦苦挣扎的人可以断言。当然,我可能是错的。
T
Tschallacka

我正在为网站使用共享主机,无法在那里执行命令。除了通过浏览器请求的 php 脚本请求运行 composer 之外,我通常使用以下工作流程:

确保您在本地安装了 php。

在桌面上制作目录。

从 https://getcomposer.org/download/ 下载 composer.phar(在标题 *Manual Download 下)并将其放在目录中。

制作一个 composer.json 文件,在其中粘贴以下内容 { "require": { "coinbase/coinbase": "~2.0" } }

使用您选择的 shell 浏览到目录(bash、git-bash、cmd、windows bash)

键入 php composer.phar 更新

通过 ftp 或您使用的任何机制将供应商目录上传到您的网络服务器。

包含在您加载库的 php 项目中(修改您上传供应商目录的路径,以便它包含该自动加载文件) require_once('vendor/autoload.php');

通过这种方式,您可以获得依赖项管理的好处,并且您不必手动包含所有海量文件并手动下载所有依赖项,并且更新它们就像输入 php composer.phar update 然后替换您的供应商目录一样简单服务器与新的。


j
jsmars

可以通过制作自己的小型本地作曲家下载器来完成对我有用的替代解决方案(因为 php-download 已关闭)。

在本地下载并安装 XAMPP:https://www.apachefriends.org/index.html 在本地下载并安装 composer:https://getcomposer.org/download/ 打开命令提示符,导航到 c:\temp 并简单地输入composer 依赖,例如:composer require League/oauth2-client 使用 FTP 程序将文件从你的 c:\temp 文件夹复制到你的 web 主机添加到你的 php 的顶部: require("vendor/autoload.php") ;


像魅力一样工作!谢谢你:)
A
Adam Thompson

我必须为我没有 SSH 访问权限的 FTP 服务器执行此操作。此处列出的站点有效,然后我意识到您可以在自己的服务器上安装 composer(使用目标的 PHP 版本),然后复制所有文件。


这应该是答案。完美地为我工作,
你能更好地解释你的答案吗?对不起我的愚蠢。
@IchHabsDrauf 基本上他使用作曲家(在这部分,它不是真正的anwser),而不是将文件复制到生产环境。我对此的评论是,也许有些人在开发环境中也没有作曲家,因此这并不是真正的答案。
h
helderk

这不是最终的解决方案,但对我来说,它对大多数情况都有很大帮助:https://github.com/Wilkins/composer-file-loader

允许您像 composer 那样加载 composer.json 文件。这允许您在没有 composer 的情况下加载 composer.json 文件(所以理论上 PHP 5.2 就足够了)

我知道这个问题很老,但我希望它会对某人有所帮助。


M
Marco Consiglio

分析问题

在没有 Composer 的情况下安装依赖项的问题是自动加载系统。

Composer 使用基于数组映射的自制自动加载器,这是事实上的标准。但是这个自动加载系统,在这种情况下“幸运地”,不符合 PSR-4 标准。

PSR-4 是 PHP 中自动加载类的 de-iure 标准,因此您无法逃避自动加载。您必须使用其中之一。

解决方案建议

在这种情况下,只要您在源代码的早期需要自定义 autoload.php 文件,就可以手动将 this brilliant PSR-4 autoloader 配置为在代码中的任何位置自动加载 VendorNamespace 中的 VendorClass

现实生活中的例子

让我们看一下这个例子:我有一个遗留项目不能也不会使用 Composer,即使上帝允许奇迹发生,也永远不会使用 Composer。使用这个出色的 package for command line scripts,可以加快该项目的开发速度。这是我的项目目录结构:

 - src
 - tests
 - vendor (not the Composer's one)

这个包有这个目录结构:

 - examples
 - src
   - Commando
 - tests

我唯一需要的是 src 文件夹。将此文件夹放在我的供应商文件夹中就可以了。所以我的自定义自动加载器会是这样的:

// Constants
$base_path = "path\to\my\project";
$autoloader_class = '\vendor\MarcoConsiglio-Wichee\PSR-4-Autoloading\Psr4AutoloaderClass.php';
define("BASE_PATH", str_replace("\\", DIRECTORY_SEPARATOR, $base_path));

// Autoloader
require_once BASE_PATH.'\vendor\MarcoConsiglio-Wichee\PSR-4-Autoloading\Psr4AutoloaderClass.php';

// Init the autoloader.
$package = [
    "nategood\commando" => [
        "namespace" => "Commando",
        "path" => str_replace("\\", DIRECTORY_SEPARATOR, '\vendor\nategood\commando\src\Commando')
    ],
    "kevinlebrun\colors.php" => [
        "namespace" => "Colors",
        "path" => str_replace("\\", DIRECTORY_SEPARATOR, '\vendor\kevinlebrun\colors.php\src\Colors')
    ]
];

// Register namespaces.
$loader = new \PSR4\Psr4AutoloaderClass;
$loader->register();
                      // Namespace                                      // Path to source
$loader->addNamespace($package["nategood\commando"]["namespace"],       BASE_PATH.$package["nategood\commando"]["path"]);
$loader->addNamespace($package["nategood\commando"]["namespace"],       BASE_PATH.$package["nategood\commando"]["path"]."\Util");
$loader->addNamespace($package["kevinlebrun\colors.php"]["namespace"],  BASE_PATH.$package["kevinlebrun\colors.php"]["path"]);

现在我可以在项目的任何地方使用命令包了!

优点缺点

该解决方案允许您:

轻松手动构建您自己的自定义自动加载器(您只需指定 VendorNamespace 和在 VendorNamespace 中搜索 VendorClasses 的文件夹。

在项目文件夹中的任何位置自由组织您的作曲家依赖项(为什么不,在它之外)

导入项目中的作曲家包(使用 Composer 在本地下载或克隆包存储库)或其相关部分(即删除 composer.json 文件或需要作曲家自动加载器的文件)。

缺点:

手动构建您的自定义自动加载器意味着处理项目的每个所需依赖项(我希望不是很多)。

包源路径中的错误可能是乏味且令人沮丧的。

仅适用于符合 PSR-4 的文件名(即不能使用 A.class.php 文件名)