您是否打算從服務器中的一個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 */
這是一個可能的解決方案的粗略想法,雖然這不是很安全。只需兩美分。
謝謝你的回答。你能解釋一下我會採取什麼樣的安全風險嗎?非常感激。 – ykbks
您可能希望將這些特定於域的配置文件從您的項目源代碼樹本身移開,特別是如果您希望將這些配置文件提供給客戶端時。 另外CodeIgniter提供給你的方式是直接修改'$ config'和'$ database'變量是一個安全漏洞 - 如果客戶端修改了不應該被修改的設置,那該怎麼辦? (將編輯我的答案以獲得解決方案。) 另一個是$ _SERVER ['HTTP_HOST']在CLI中不可用。你必須找到解決辦法(也許捕獲CLI參數並找到適當的配置文件)。 –
謝謝。我會試試這個。 – ykbks