【问题标题】:Multisite with Codeigniter 3 | Database auto switch多站点与 Codeigniter 3 |数据库自动切换
【发布时间】:2016-03-03 19:37:39
【问题描述】:

大家好,我在使用 Codeigniter 的多站点方面需要一些帮助。

所以我正在开发一个多站点系统,在该系统中不同的公司注册并获得他们的子域(例如公司ABC 转到www.system.com 并注册,然后他们获得子域abc.system.com)然后是数据库@ 987654324@(加密)生成,系统默认创建表。

所有公司都使用相同的界面,所以唯一的变化就是数据库。

我的想法是每次有人访问abc.system.com 我爆炸(abc.system.com)我把abc 加密它并将config/database.php 中的数据库连接更改为

$db['company'] = array(
'database' => 'encrypted(abc)',

用户将使用$this->db->query

但现在想想,当其他人碰巧登录xyz.system.com时,灾难就会发生,因为连接将再次变为encrypted(xyz),因为他/她也将使用$this->db->query

请记住,系统是唯一的一个数据库正在发生变化。

我不明白使用.htaccess的多站点技术

现在我对如何解决它有什么想法吗? 我正在使用 codeigniter 3。

【问题讨论】:

  • 您的 www.system.com 与其他所有动态创建的 abc.system.com / xyz 的行为是否完全不同...
  • 是的,www.system.com 是用户注册公司时的主域/登陆域,而abc.system.com 是服务于 abc 公司 @Svetlio 的系统

标签: php mysql .htaccess codeigniter codeigniter-3


【解决方案1】:

我可以建议您在 MY_Controller 类中初始化第二个“公司”数据库,您可以在所有控制器中进行扩展(也许只有那些与公司相关的控制器。

通过 CI 默认配置,您可以在核心文件夹中创建 MY_Conroller,该文件夹将扩展 CI_Controller,并且您的控制器中的任何控制器都可以扩展它。

在这个 MY_Controller 中,您将能够解析主机(域)并设置正确的 DB.. 示例:

class My_Controller extends CI_Controller {
    protected $dbC;

    public function __construct(){
        parent::__construct();

        //HERE YOU CAN MAKE THE 2nd DB load after you detect that you are in valid subdomain
        $expHost = explode('.', $_SERVER['HTTP_HOST']));
        if( count($expHost) === 3 && $expHost !== 'www') {
            $dbC_config = // Get your DB COMPANY configurations or input it here as array..
            $dbC_config['database'] = 'encrypted('.$expHost[0].')';
            $this->dbC = $this->load->database($dbC_config);
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-02
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    相关资源
    最近更新 更多