[英]How do I install Composer PHP packages without Composer?
我正在尝试安装 Coinbase PHP API,但它需要 Composer:
https://github.com/coinbase/coinbase-php
我正在寻找一个通用的 PHP 解决方案(也许是一个函数),让我可以将 Composer 包直接安装到我的服务器上,而不必使用 Composer。
我认为 Composer 的开发人员相信他们正在帮助人们,但实际上有成千上万的初学者开发人员被“Composer 障碍”锁定在学习 Web 开发之外。
如果有一个灵活的解决方案或某种方法可以在没有 Composer 的情况下进行安装,那真的会有所帮助吗? 我怎样才能做到这一点?
请不要用一些讽刺的评论来回应。 有些人不想使用 Composer,我不明白为什么我们应该被赶到特定的第三方软件中以进行 Web 开发。
您可以尝试https://php-download.com/ ,它可以帮助您在大多数情况下下载所有依赖项以及vendor
文件夹。 它承诺不需要作曲家。 我自己试过了。 它会查找并创建所有必需的文件夹并将其压缩以供下载。 完美运行!
composer.json
文件列出了依赖项。 在你的例子中:
"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 并不完美,它并不适合所有用例,但是,在安装依赖于它的库时,它无疑是最好的选择,而且相当不错。
我已经检查了我的其他答案。 它们主要分为两类:
除非我遗漏了什么,否则他们都没有解决 OP 表达的投诉:
我正在为网站使用共享主机,但无法在那里执行命令。 除了通过浏览器请求的 php 脚本请求运行 composer 之外,我通常使用以下工作流程:
制作一个文件composer.json在其中粘贴以下内容
{ "require": { "coinbase/coinbase": "~2.0" } }
使用您选择的 shell 浏览到目录(bash、git-bash、cmd、windows bash)
php composer.phar update
包含在您加载库的 php 项目中(修改上传供应商目录的路径,以便它包含该自动加载文件)
require_once('vendor/autoload.php');
通过这种方式,您可以获得依赖项管理的好处,并且您不必手动包含所有海量文件并手动下载所有依赖项,更新它们就像输入php composer.phar update
然后替换供应商目录一样简单在您的服务器上使用新的。
我必须为我没有 SSH 访问权限的 FTP 服务器执行此操作。 此处列出的站点有效,然后我意识到您可以在自己的服务器上安装 Composer(使用目标的 PHP 版本),然后复制所有文件。
一个对我有用的替代解决方案(因为 php-download 已关闭)可以通过制作您自己的小型本地 composer 下载器来完成。
c:\\temp
并简单地输入 Composer 依赖项,例如: composer require league/oauth2-client
c:\\temp
文件夹复制到 Web 主机require("vendor/autoload.php");
这不是最终的解决方案,但对我来说,这对大多数情况都有很大帮助: https : //github.com/Wilkins/composer-file-loader
允许您像 composer 那样加载 composer.json 文件。 这允许你在没有 composer 的情况下加载 composer.json 文件(所以理论上 PHP 5.2 就足够了)
我知道这个问题很老,但我希望它会帮助某人。
在没有 Composer的情况下安装依赖项的问题是自动加载系统。
Composer 使用基于数组映射的自制自动加载器,这是事实上的标准。 但是这个自动加载系统,在这种情况下“幸运”,不符合 PSR-4。
PSR-4 是在 PHP 中自动加载类的de-iure 标准,因此您无法摆脱自动加载。 您必须使用其中之一。
在这种情况下,只要您在源代码的早期需要自定义autoload.php
文件,就可以手动配置这个出色的 PSR-4 自动加载器,以在代码的任何位置的VendorNamespace
自动加载VendorClass
。
让我们看看这个例子:我有一个遗留项目,他不能也不会使用 Composer,即使上帝奇迹般地允许这样做。 使用这个出色的命令行脚本包可以加快该项目的开发速度。 这是我的项目目录结构:
- 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
并在搜索文件夹(S) VendorClass
在ES VendorNamespace
。缺点:
A.class.php
文件名)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.