【问题标题】:Composer Install for a PHP-C++ Project为 PHP-C++ 项目安装 Composer
【发布时间】:2019-06-02 10:21:27
【问题描述】:

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

我很困惑。我正在开发一个项目,其“源”构建具有以下结构

web/
src/

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

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

我现在需要将php-jwt 添加到这个“项目”(这是一个混合 PHP+C++ 项目)中,以便我可以将 jwt 库包含在 web/views/myfile.php 内的某个文件中

我还有以下额外要求:

  • 项目比较大,打包规则比较复杂。最后,基本上会创建用户安装在其系统上的 RPM 或 DEB 文件。我想确保安装项目的用户不需要安装作曲家,其中jwt-php 是其中的一部分。

鉴于此,我究竟应该在哪里使用 composer 下载 jwt 库?在web/ 里面?

【问题讨论】:

    标签: php composer-php


    【解决方案1】:

    也许,我们只需在这两个目录旁边添加一个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,我们会安装 composer:

    cd path/to/main/dir
    
    sudo composer install
    

    我们以后可以随时更改目录。一开始它可能并不那么重要。

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      谷歌翻译回答

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

      【讨论】:

      • 请注意,在 Web 可访问目录中包含 composer.jsoncomposer.lockvendor 是潜在的安全问题。
      • 哦,好的。在那种情况下,我想我需要做@Emma 在另一个答案中建议的事情。谢谢。
      【解决方案3】:

      如果您不想使用 composer,那么您可以简单地下载该库并在您的代码中调用它。

      <?php
      
        require _DIR.'path-to-librayr';
      
        use class;
      

      【讨论】:

        猜你喜欢
        • 2015-07-14
        • 2015-07-21
        • 2013-09-17
        • 2022-10-09
        • 1970-01-01
        • 2017-10-14
        • 2018-11-19
        • 2014-12-28
        相关资源
        最近更新 更多