【问题标题】:Yii2 configuring to use vendor folder in an external http storageYii2 配置使用外部 http 存储中的供应商文件夹
【发布时间】:2017-07-16 21:11:38
【问题描述】:

我有多个使用 yii2 框架构建的 restful api,我想要使用存储在不同地址中的单个供应商目录

那是

我有一个托管在www.example1.com 的应用程序和另一个托管在www.example2.com 的应用程序,而我希望将供应商文件包含在www.example3.com 上,这样在示例1 和示例2 中我只需要上传没有供应商目录的 resful 文件夹

查看 yii2 高级文件夹后,我在 index.php 中找到了这些行

require(__DIR__ . '/_protected/vendor/autoload.php');
require(__DIR__ . '/_protected/vendor/yiisoft/yii2/Yii.php');

我已经尝试过通过这样做来解决问题

require(__DIR__ . 'http:://example1.com/pathto/_protected/vendor/autoload.php');

但上述失败,我怎样才能最好地做到这一点

【问题讨论】:

  • 首先删除 DIR,顺便说一句,这会使应用程序面临一些安全问题
  • 据我了解,您正试图在域之间共享 PHP 源代码。这些域是否托管在不同的服务器上?如果没有,您可以只使用require() 需要与其他域共享的vendor 文件夹的本地路径。如果托管在不同的服务器上,那么您尝试过的操作将不起作用,因为脚本将在源服务器上运行,而不是在目标服务器(requires 它的服务器)上运行,顺便说一句,您的语法是错误的。此外,这是一种不安全和不寻常的方法。如果vendor文件夹中的源不会经常更改,建议你把它放在每个域上。
  • 正如许多其他人已经指出的那样,如果您将这些 RESTful API 托管在不同的服务器上,那么出于安全考虑,不鼓励共享此类资源。

标签: php yii2 yii2-advanced-app


【解决方案1】:

你不能通过 HTTP 做到这一点。

唯一的解决方案是创建共享的 NFS 卷,它将作为您的 vendor/ 目录安装在两台服务器上。之后您将能够为两台服务器使用相同的供应商目录。

如果将这两个站点部署到同一台服务器上,可能会更容易。

【讨论】:

    【解决方案2】:

    这很简单。 您可以将供应商文件复制到您的下一个项目中,并将所需文件路径(autoload.php 和 yii.php)的两行更改为正确的供应商位置。 /config/web.php。使用您的供应商目录将 vendorPath 添加到配置中。 当供应商从 /var/www/html/myapp/vendor 移动到 /var/www/html/frameworks/yii2 时,您会发现安装新扩展或通过 composer 命令更新现有扩展的问题。要修复它,请通过在 config 部分下添加 vendor-dir 属性来修改您的 composer.json(就在您的项目目录下),例如:

    // 其他设置 ... “配置”:{ "vendor-dir":"你的路径", “进程超时”:1800 }, // 其他设置 ...

    此外,在更新或安装新扩展时,您可能会发现“中间人攻击”消息(我不知道是否与 composer.json 的修改有关,但我明白了在实验过程中多次)。要修复它,请运行 composer update --dry-run。那么就OK了。

    【讨论】:

      【解决方案3】:

      这可以做到:Include through http。 您需要设置一些 php 变量(allow_url_include、allow_url_fopen)。而且你需要去掉 php 文件路径前面的 __DIR__ 常量:

      require('http://example1.com/pathto/_protected/vendor/autoload.php');
      

      但是

      不要这样做。真的。您不想经历所有这些不安全的 php 设置。而且您不想将您的供应商文件暴露给世界上的所有人。如果你的脚本可以通过http访问php源代码,那么大家都可以。此外,通过 http 包含将非常慢。

      (可能)唯一的解决方案

      如果你真的想在多个网站之间共享核心 php 文件,你可以购买虚拟服务器,在上面设置两个网站,然后在该服务器上创建一个可以从所有网站访问的文件夹。

      您甚至不需要虚拟服务器,您可以使用某种多主机服务,为每个网站提供自定义文件夹,并为核心(供应商)文件提供共享文件夹。

      【讨论】:

        猜你喜欢
        • 2018-03-17
        • 1970-01-01
        • 1970-01-01
        • 2021-08-18
        • 1970-01-01
        • 1970-01-01
        • 2021-05-21
        • 2020-02-09
        • 2017-01-27
        相关资源
        最近更新 更多