为PHP-C ++项目安装Composer

时间:2019-05-04 21:55:55

标签: php composer-php

我已经在SO中阅读了几个有关如何在另一个“项目”中安装第三方库的问题。不可避免地,答案是使用composer,他们都说我们在项目根目录中需要一个composer.json文件。

我很困惑。我正在一个项目中,其“源”版本具有以下结构

web/
src/

web文件夹包含由项目实现的几个PHP文件。到目前为止,该项目完全没有使用作曲家。

src目录包含一些核心引擎文件的c / c ++文件。

我现在需要以这种方式将php-jwt添加到这个“项目”(这是一个PHP + C ++的混合项目),以便可以将jwt库包含在{{1}内的某个文件中}

我还具有以下附加要求:

  • 该项目很大,包装规则也很复杂。最后,基本上会创建用户安装在系统上的RPM或DEB文件。我要确保安装项目的用户(其中​​web/views/myfile.php是其中的一部分)不需要安装composer。

鉴于此,我到底在哪里使用composer下载jwt库?在jwt-php里面吗?

3 个答案:

答案 0 :(得分:3)

也许,我们只是在这两个目录旁边添加一个composer.json

- web/
- src/
- vendor/---------
composer.json    -
composer.lock    -
                 ------ autoload.php
                 ------ composer
                 ------ jwt-php
                 ------ other-php-cpp-package-1
                 ------ other-php-cpp-package-2
                 ------ other-php-cpp-package-3
                 ------ other-php-cpp-package-4
                 -------

然后,我们的composer.json可能看起来像:

{
    "name": "project/cphp",
    "type": "library",
    "description": "PHP C++ Project X",
    "keywords": ["php","c++"],
    "copyright": "",
    "license": "",
    "version": "1.0.0",
    "authors": [{
        "name": "user1361529",
        "role": "Developer"
    }],
    "require": {
        "jwt-php": "*",
    },
    "require-dev": {},
    "autoload": {
        "classmap": [],
        "psr-0": {},
        "psr-4": {}
    },
    "config": {}
}

例如,如果使用的是MacOS,我们将安装作曲家:

cd path/to/main/dir

sudo composer install

我们以后总是可以更改目录。最初可能并不那么重要。

答案 1 :(得分:1)

如您所说,您的项目是一种多语言混合应用程序。

我不建议您在项目的根目录中安装供应商的供应商目录。如果您的php主要存在于Web目录中,则可以在web目录中安装供应商。目录结构如下:

web/
---vendor/
------autoload.php
------...
---composer.json
---composer.lock
---...
src/

要获取对已安装库的引用,可以使用include '../vendor/autoload.php'中的web/views/myfile.php来加载作曲家自动注册脚本(或者您可以在统一的主条目脚本中引入自动加载功能)。然后通过命名空间调用第三方库:new Firebase\JWT\JWT();

然后,将供应商提交给您的VCS,并将其打包到RPM或DEB中,这样您的客户就无需安装composer。

Google Translate的答案

修改: 将供应商目录放置在对Web服务器具有开放权限的目录中是危险的。请根据实际情况调整具体目录结构。顺便说一下,名为web的目录不一定具有Web服务器的打开权限。

答案 2 :(得分:-2)

如果您不想使用作曲家,则只需下载该库并在您的代码中调用它即可。

<?php

  require _DIR.'path-to-librayr';

  use class;