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

时间:2016-11-11 10:16:56

标签: php composer-php

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

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

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

我认为Composer的开发人员相信他们正在帮助人们,但实际上有成千上万的初学者开发者被“作曲家障碍”锁定在学习Web开发之外。

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

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

7 个答案:

答案 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拥有适用于Windows的官方GUI安装程序以及适用于所有平台的复制和粘贴命令行安装程序。
  • Composer可以在本地运行,其输出只是在其他地方上传。您在共享主机中不需要SSH。
  • 安装库所需的命令可以从软件包网站复制和粘贴 - 即使软件包维护者不关心它,packagist.org默认生成它。

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

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

  1. 安装库并用它编写自定义下载脚本
  2. 使用Composer的在线网络界面
  3. 除非我遗漏了什么,否则他们都没有解决OP所表达的抱怨:

    • 学习曲线
    • 使用第三方软件
    • 可以在服务器上开发(使用SSH,我猜)
    • 潜在的深度依赖树

答案 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之外,我通常使用这个工作流程:

  • 确保您已在本地安装了php。
  • 在桌面上创建目录。
  • https://getcomposer.org/download/下载composer.phar(标题 *手动下载下方)并将其放在目录中。
  • 将文件 composer.json 粘贴到其中以下内容

     {
         "require": {
             "coinbase/coinbase": "~2.0"
         }
     }
    
  • 浏览到您选择的shell目录(bash,git-bash,cmd,windows bash)

  • 输入php composer.phar update screenshot of bash output
  • 通过ftp或您使用的任何技工将供应商目录上传到您的网络服务器。
  • 包含在您加载库的php项目中(修改上传供应商目录的路径,以便它包含该自动加载文件)

    require_once('vendor/autoload.php');
    

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

答案 5 :(得分:2)

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

  1. 在本地下载并安装XAMPP:https://www.apachefriends.org/index.html
  2. 在本地下载并安装Composer:https://getcomposer.org/download/
  3. 打开命令提示符,导航至c:\temp,然后只需键入撰写者相关性即可,例如:composer require league/oauth2-client
  4. 使用FTP程序将文件从c:\temp文件夹复制到Web主机
  5. 将此添加到您的php顶部: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的文件夹即可。
  • 在项目文件夹中的任意位置(以及为什么不在其外部)自由组织您的composer依赖项
  • 按原样(在Composer中本地下载或克隆软件包存储库)或其中的相关部分(例如,删除composer.json文件或需要composer自动加载器的文件)导入composer软件包。

缺点:

  • 手动构建自定义自动加载器意味着可以对项目的每个依赖项进行操作(希望不是很多)。
  • 程序包源路径中的错误可能很乏味且令人沮丧。
  • 仅适用于符合PSR-4的文件名(即不能使用A.class.php文件名)