多站点Codeigniter项目的最佳方法?

时间:2014-02-25 09:35:19

标签: php codeigniter

感谢您花时间阅读本文。

这就是我想要的:

我将有一个主服务器,它将保存客户端的包信息,他们订购的主题以及他们从我的市场附加的a_ds。

我不希望他们的网站成为子域,而是他们自己的域,它将由我在共享环境中托管。

现在,我想以这样的方式设置我的CI项目,这些将会发生。每个客户都将获得自己的项目空间和数据库,但我希望他们的特定项目从我的数据库/ CI功能中获取他们的设置。

我知道我的写作非常糟糕,但即便谷歌也因此失败了。你们是我最后的希望。

提前致谢!!

1 个答案:

答案 0 :(得分:2)

您是否打算从服务器中的一个CodeIgniter源运行这些多个站点,应用程序配置会根据访问的域而有所不同?

如果是这种情况,那么这里有一个可供您选择的选项:

application/config中组织不同的配置,如下所示:

application/
    config/
        domains/
            foo.com/
                database.php
                config.php
            bar.net/
                database.php
                config.php
            baz.org/
                database.php
                config.php

这些application/config/domains/*/(database|config).php文件中的每一个都包含仅针对特定域的配置(您必须以某种方式生成这些)。

示例:

  //In database.php files
  return array(
       'username' => 'client1',
       'password' => 'password!',
       'database' => 'client1_db'
  );

  //In config.php files
  return array(
       'base_url' => 'http://baz.org'
  );

然后根据请求中使用的域包含正确的文件:

application/config/database.php

  $client_vars = include __DIR__ . '/domains/' . $_SERVER['HTTP_HOST'] . '/database.php';

  /* validate $client_vars to ensure that client is not overriding anything important. Throw an error to inform client. */
  $db['default'] = array_replace($db['default'], $client_vars);

  /* Rest of DB settings. */

application/config/config.php

  $client_vars = include __DIR__ . '/domains/' . $_SERVER['HTTP_HOST'] .'/database.php';

  /* validate $client_vars to ensure that client is not overriding anything important. Throw an error to inform client */
  $config = array_replace($config, $client_vars);

  /* Rest of config settings */

这是一个可能的解决方案的粗略概念,尽管这根本不是很安全。只需两美分。