我的产品有70个客户。每个客户都有一个MYSQL数据库,我正在使用Codeigniter。
我有70个子文件夹,例如domain.com/customer1/ domain.com/customer2/等等,在每个文件夹中,我都提到了特定客户的数据库详细信息,以及codeigniter安装的所有文件。
我想摆脱所有这些安装,并希望只为我的所有客户安装一个。理想情况下是domain.com/app /
实现这一目标的最佳方法是什么?
当其中一个客户端登录时,我尝试动态写入database.php文件。所以我所做的是在一个代码库的database.php文件中写入客户端的数据库详细信息,例如domain.com/app /并查看它是否有效。但它对其他客户不起作用,我想我在这里做错了。
答案 0 :(得分:0)
为什么不为每个客户端使用子域,并将Web根指向该一个文件夹。您可以使用子域作为数据库名称。
VHOST:
<VirtualHost *:80>
ServerName client.domain.com
ServerAlias *.domain.com
DocumentRoot /home/clients/public_html
<Directory /home/clients/public_html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
</Directory>
</VirtualHost>
然后像这样修改database.php
$client_name = substr($_SERVER['HTTP_HOST'], 0, strpos($_SERVER['HTTP_HOST'], '.'));
$db['default'] = array(
'dsn' => '',
'hostname' => 'localhost',
'username' => 'username',
'password' => 'password',
'database' => "$client_name",
'dbdriver' => 'mysqli',
'dbprefix' => 'phppos_',
'pconnect' => FALSE,
'db_debug' => FALSE,
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => FALSE