用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3625|回复: 3
收起左侧

多域名分别对应一个数据库,但同一个控制器、视图和模型?

[复制链接]
发表于 2012-9-6 18:37:02 | 显示全部楼层 |阅读模式
具体情况是这样的
用CI做的网站,是给多个地区使用,每个地区的网站用不同的数据库,但数据库里的结构完全一样,也就只是说,把同一个数据库复制一份,只是给数据库改了个名字而已,就变成了两个数据库,如两个数据库名分别叫:db_beijing和db_shanghai,而且这两个数据库也是在同一台服务器上

比如,当用 beijing.abc.com 访问网站时 和用 shanghai.ab.com 访问网站时,他们都是访问同一个控制器文件、同一个视图,同一个模型,只有连接的数据库不同,
beijing.abc.com 连接到 db_beijing 这个数据库上
shanghai.abc.com 连接到 db_shanghai 这个数据库上

但因为他们功能什么的都完全一样,所以不想复制出多份程序,只想用一份,这样的话,以后升级维护时,只用修改一次文件 这所有地区的网站都升级了,比如方便

我想的是 通过检测,得到访问网站的域名,然后根据这个域名,改变数据库配置的数据库名,这样就能轻松实现了
比如 当检测到是 beijing.abc.com 访问本站时,把数据库配置里的 $db['default']['database'] 的值赋成 'db_beijing'
比如 当检测到是shanghai.abc.com 访问本站时,把数据库配置里的 $db['default']['database'] 的值赋成 'db_shanghai'
其他所有东西都完全不必修改,就可实现我想要的功能

但具体怎样在整个系统中检测这个访问过来的域名,检测出来域名后,又是怎么改变数据库的配置,把【数据库名】这一样改成对应的数据库名,这点我不知道怎么做

麻烦各位老师 朋友 帮助指点一下,成分感激!!
谢谢!!!
发表于 2012-9-6 18:51:50 | 显示全部楼层
$db['default']['database'] = ………………
$db['db_beijin']['database']  = …………
$db['db_shanghai']['database']  = …………

switch ()
{
    ……
    $this->load->database('db_beijing')
}
发表于 2012-9-10 21:54:05 | 显示全部楼层
用HOOK应该可以
发表于 2013-6-6 13:59:58 | 显示全部楼层
能具体些吗 要是用钩子的话

本版积分规则