2014-02-25 51 views
0

感謝您花時間閱讀本文。多站點Codeigniter項目的最佳解決方案?

這是我想要的東西:

我將有一個主服務器,它會保存客戶端的包信息,他們已經下令主題和a_ds他們從我的市場連接。

我不希望他們的網站成爲子網域,而是他們自己的網域,它將由我在共享環境中託管。

現在,我想以這種方式設置我的CI項目,以使這些會發生。每個客戶都會得到他們自己的項目空間和數據庫,但我希望他們的特定項目能夠從我的數據庫/ CI功能中派生出他們的設置。

我知道我寫得很糟糕,但即使谷歌也沒有在這方面讓我失望。你們是我最後的希望。

在此先感謝!

回答

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 */ 

這是一個可能的解決方案的粗略想法,雖然這不是很安全。只需兩美分。

+0

謝謝你的回答。你能解釋一下我會採取什麼樣的安全風險嗎?非常感激。 – ykbks

+0

您可能希望將這些特定於域的配置文件從您的項目源代碼樹本身移開,特別是如果您希望將這些配置文件提供給客戶端時。 另外CodeIgniter提供給你的方式是直接修改'$ config'和'$ database'變量是一個安全漏洞 - 如果客戶端修改了不應該被修改的設置,那該怎麼辦? (將編輯我的答案以獲得解決方案。) 另一個是$ _SERVER ['HTTP_HOST']在CLI中不可用。你必須找到解決辦法(也許捕獲CLI參數並找到適當的配置文件)。 –

+0

謝謝。我會試試這個。 – ykbks