Php 用于多个域的单个Codeigniter代码库

Php 用于多个域的单个Codeigniter代码库,php,codeigniter,codeigniter-2,Php,Codeigniter,Codeigniter 2,我正在寻找一个关于如何在多个域中使用CodeIgniter的清晰解释。我想要一组模型和配置文件,能够根据请求来自的域调用不同的控制器。在做了一些研究之后,我相当确定我目前的设置方式并不理想,我想在我进入建筑领域之前修复它。以下是当前设置: 我正在管理三个域: domainA.com domainB.com domainC.com 每个域指向我的服务器上的不同文件夹: /domains /global /models /model1.php

我正在寻找一个关于如何在多个域中使用CodeIgniter的清晰解释。我想要一组模型和配置文件,能够根据请求来自的域调用不同的控制器。在做了一些研究之后,我相当确定我目前的设置方式并不理想,我想在我进入建筑领域之前修复它。以下是当前设置:

我正在管理三个域:

domainA.com
domainB.com
domainC.com
每个域指向我的服务器上的不同文件夹:

/domains
    /global
        /models
            /model1.php
            /model2.php
    /domainA.com   <--- domainA.com points here
            /application
                /controllers
                    /domainAController1.php
                    /domainAController2.php
            /assets
            /system
            /index.php
    /domainB.com    <--- domainB.com points here
            /application
                /controllers
                    /domainBController1.php
                    /domainBController2.php
            /assets
            /system
            /index.php
    /domainC.com    <--- domainC.com points here
            /application
                /controllers
                    /domainCController1.php
                    /domainCController2.php
            /assets
            /system
            /index.php
这使我能够正常地从控制器加载模型,例如:

$this->load->model('model1');
上面显示的文件夹层次结构不完整。在每个域文件夹中,都有完整的CI安装。因此,如果我想为整个“应用程序”定义常量或配置参数,我基本上需要做三次。而且,我开发的越多,我就越需要更多的高级功能,比如基本模型和控制器,我感觉我现在使用的“包路径”解决方案行不通

这显然不是正确的方法,我希望有人能给我一个更好的方法来实现这一点

我正在运行CodeIgniter 2.1.4版

*************************************更新***********************************************

下面是我最后为使这项工作发挥作用所做的工作。我希望有人能就这是一个好主意还是一个坏主意提出建议,也就是说,使用这种方法,你能预见到任何明显的问题吗

我使用routes和controller子文件夹来完成我所需要的。我现在只安装了一个CI,在我的controller文件夹中,我有domainA.com、domainB.com和domainC.com的子文件夹

然后,在我的routes.php文件中,我在保留路由之后添加了以下内容:

switch($_SERVER['SERVER_NAME']){
        case 'domainA.com':
                $controllerSubDirectory = 'domainA.com';
                break;
        case 'domainB.com':
                $controllerSubDirectory = 'domainB.com';
                break;
        case 'domainC.com':
                $controllerSubDirectory = 'domainC.com';
                break;
        default:
                $controllerSubDirectory = '';
                break;
}

    route['(.*)'] = "{$controllerSubDirectory}/$1";
换句话说,我只是接收传入的请求并对其进行路由,就好像它实际上是以适当的子文件夹作为它的第一个URI段传入的一样

有什么我没有想到的问题吗?可能是某种安全风险吗?

简单的回答是:利用CodeIgniter的“第三方”功能

您的目录结构组织得不是很好。不需要存储CodeIgniter系统文件的多个副本,当然,假设所有应用程序都使用相同的系统(版本和对核心文件的无/相同修改)

查看更多详细信息


如上所述,您可以利用CI的软件包将您的通用代码作为第三方软件包进行打包。然后您可以像平常一样加载模型和其他资源,CI将知道如何自己找到它们。

谢谢Petar。这将如何导致CI根据d知道要使用哪些控制器omain请求?此外,如果我将我的模型设置为第三方软件包,我仍然需要在任何时候在控制器中使用模型时添加软件包路径,这与我现在所做的相同。我已经阅读了您链接到的关于运行多个应用程序的文档页面,但这似乎意味着每个“应用程序”“在其文件夹中仍需要模型、控制器等的子目录。还是我误解了?你能告诉我你将使用的目录结构吗?@flyingL123-你是正确的,每个应用程序都需要一份文件副本(应用程序/第三方),但如果你将其组织为第三方软件包,你可以维护一个软件包,然后复制/粘贴每个应用程序所需的任何版本。另一方面,您能否使用.htaccess路由来自不同域的请求?老实说,我不确定,但可能还需要更改config.php文件(设置动态主机名)。
switch($_SERVER['SERVER_NAME']){
        case 'domainA.com':
                $controllerSubDirectory = 'domainA.com';
                break;
        case 'domainB.com':
                $controllerSubDirectory = 'domainB.com';
                break;
        case 'domainC.com':
                $controllerSubDirectory = 'domainC.com';
                break;
        default:
                $controllerSubDirectory = '';
                break;
}

    route['(.*)'] = "{$controllerSubDirectory}/$1";