我正在尝试安装Coinbase PHP API,但它需要Composer:
https://github.com/coinbase/coinbase-php
我正在寻找一个通用的PHP解决方案(可能是一个函数)让我直接将编写器包安装到我的服务器上,而不必使用Composer。
我认为Composer的开发人员相信他们正在帮助人们,但实际上有成千上万的初学者开发者被“作曲家障碍”锁定在学习Web开发之外。
如果有灵活的解决方案或某种方法可以在没有Composer的情况下安装,那真的会有所帮助吗?我怎么能这样做?
请不要回复一些讽刺评论。有些人不想使用Composer,我不明白为什么我们应该成为特定的第三方软件才能进行Web开发。
答案 0 :(得分:65)
您可以尝试https://php-download.com/,它可以帮助您在大多数情况下下载所有依赖项以及vendor
文件夹。它承诺作曲家不需要。
自己试了一下。它查找并创建所有必需的文件夹并将其拉下以供下载。完美的工作!!
答案 1 :(得分:21)
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并不完美,并不适合所有用例,但是,当涉及到安装依赖它的库时,它无疑是最好的选择,而且它是一个相当不错的选择。
我已经检查了我之后的其他答案。它们大多分为两类:
除非我遗漏了什么,否则他们都没有解决OP所表达的抱怨:
答案 2 :(得分:3)
我必须为没有SSH访问权限的FTP服务器执行此操作。这里列出的网站工作,然后我意识到你可以在自己的服务器上安装一个作曲家(使用目标的PHP版本),然后复制所有文件。
答案 3 :(得分:2)
这不是最终的解决方案,但对我来说,这对大多数情况来说是一个很大的帮助: https://github.com/Wilkins/composer-file-loader
允许您像composer一样加载composer.json文件。 这允许您在没有composer的情况下加载composer.json文件(所以 理论上PHP 5.2就够了)
我知道这个问题已经过时了,但我希望它会对某人有所帮助。
答案 4 :(得分:2)
我正在使用网站的共享托管,并且无法在那里执行命令。除了通过浏览器请求的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
然后替换一样简单使用新服务器的服务器上的供应商目录。
答案 5 :(得分:2)
一个对我有用的替代解决方案(因为php下载已关闭)可以通过制作自己的小型本地作曲家下载器来实现。
c:\temp
,然后只需键入撰写者相关性即可,例如:composer require league/oauth2-client
c:\temp
文件夹复制到Web主机require("vendor/autoload.php");
答案 6 :(得分:0)
在没有Composer 的情况下安装依赖项的问题是自动加载系统。
Composer使用基于数组映射的自制自动加载器,这是事实上的标准。 但是这种自动加载系统在这种情况下是“幸运的”,不符合PSR-4。
PSR-4是用于自动加载PHP中的类的 de-iure标准,因此您无法摆脱自动加载的麻烦。您必须使用其中之一。
在这种情况下,只要您需要自定义VendorClass
,就可以手动将this brilliant PSR-4 autoloader配置为在代码中任何位置的VendorNamespace
中自动加载autoload.php
在您的源代码中尽早保存文件。
让我们看这个例子: 我有一个遗留项目,即使上帝奇迹般地允许,也永远不会也不会使用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
和在VendorClass
中搜索VendorNamespace
的文件夹即可。缺点:
A.class.php
文件名)