Ich hatte kürzlich eine ähnliche Situation. Ich wollte mehrere Verzeichnisse haben, die alle dieselbe Anwendung ausführen, aber unterschiedliche Datenbanken verwenden. So habe ich es gemacht:
Zuerst habe ich einige leere Unterverzeichnisse erstellt. Für dieses Beispiel nennen wir sie /subdir_1
, /subdir_2
y /subdir_3
.
In jedem dieser Verzeichnisse habe ich eine Kopie der CodeIgniter index.php-Datei erstellt und in jedem Verzeichnis abgelegt. Meine Dateistruktur sieht nun etwa so aus:
/application
/system
/subdir_1
index.php
/subdir_2
index.php
/subdir_3
index.php
Dies könnte auch mit einigen .htaccess-Regeln erreicht werden, aber das ist eine ganz andere Geschichte.
In jeder der index.php-Dateien habe ich die $system_path
y $application_folder
Variablen, die auf den /application
y /system
Verzeichnisse. In meinem speziellen Fall habe ich meine index.php-Datei geändert:
/*
*---------------------------------------------------------------
* SYSTEM FOLDER NAME
*---------------------------------------------------------------
*
* This variable must contain the name of your "system" folder.
* Include the path if the folder is not in the same directory
* as this file.
*
*/
$system_path = "../system";
/*
*---------------------------------------------------------------
* APPLICATION FOLDER NAME
*---------------------------------------------------------------
*
* If you want this front controller to use a different "application"
* folder then the default one you can set its name here. The folder
* can also be renamed or relocated anywhere on your server. If
* you do, use a full server path. For more info please see the user guide:
* http://codeigniter.com/user_guide/general/managing_apps.html
*
* NO TRAILING SLASH!
*
*/
$application_folder = "../application";
Wenn Sie nun eines der Unterverzeichnisse aufrufen, sollte Ihre Anwendung angezeigt werden.
Von hier aus müssen wir die base_href
für jedes Verzeichnis. Wir werden dies mit einer einfachen Änderung der Haupt /application/config/config.php
Datei. Ersetzen Sie die $config['base_url']
Zeile in Ihrem /application/config/config.php
Datei mit:
$uri = $_SERVER['REQUEST_URI'];
$pieces = explode('/', $uri);
if ($pieces[1] == 'index.php') {
$config['base_url'] = 'http://' . $_SERVER['HTTP_HOST'] . '/';
define('SITE', 'default');
} else {
$config['base_url'] = 'http://' . $_SERVER['HTTP_HOST'] . '/' . $pieces[1] . '/';
define('SITE', $pieces[1]);
}
Das obige Snippet setzt die $config['base_url']
in das entsprechende Unterverzeichnis (oder das Stammverzeichnis, wenn es sich nicht in einem Unterverzeichnis befindet).
El define('SITE', $pieces[1])
Zeile erzeugt eine Konstante, auf die wir in unserer gesamten Anwendung zugreifen können, um zu wissen, in welchem Unterverzeichnis wir uns befinden.
Das letzte Teil des Puzzles ist es, unserer Anwendung mitzuteilen, welche Datenbank sie verwenden soll. In meinem Fall wollte ich, dass jedes Unterverzeichnis seine eigene Datenbank verwendet. Dazu verwenden wir die SITE
Konstante, die wir in der config.php
Datei.
In unserem /application/config/database.php
Datei werden wir einige alternative Datenbankeinstellungen hinzufügen. Zu diesem Zweck kopieren wir die Datei [default]
Datenbankverbindungseinstellungen und richten alternative Einstellungen für jede unserer Subdomains ein. So sieht einer meiner Sätze aus:
$db['subdir_1']['hostname'] = "localhost";
$db['subdir_1']['username'] = "[USERNAME]";
$db['subdir_1']['password'] = "[PASSWORD]";
$db['subdir_1']['database'] = "[DATABASE]";
$db['subdir_1']['dbdriver'] = 'mysql';
$db['subdir_1']['dbprefix'] = '';
$db['subdir_1']['pconnect'] = TRUE;
$db['subdir_1']['db_debug'] = TRUE;
$db['subdir_1']['cache_on'] = FALSE;
$db['subdir_1']['cachedir'] = '';
$db['subdir_1']['char_set'] = 'utf8';
$db['subdir_1']['dbcollat'] = 'utf8_general_ci';
$db['subdir_1']['swap_pre'] = '';
$db['subdir_1']['autoinit'] = TRUE;
$db['subdir_1']['stricton'] = FALSE;
Ich habe weitere Sets für [subdir_2]
y [subdir_3]
. Nun müssen wir unserer Anwendung mitteilen, welche Datenbankeinstellungen sie verwenden soll. Um dies zu tun, greifen wir auf die SITE
Konstante, so dass die letzte Zeile in unserer /application/config/database.php
Datei ist:
$active_group = (defined('SITE') && array_key_exists(SITE, $db)) ? SITE : 'default';
In der obigen Zeile wird die aktive Datenbankeinstellungsgruppe auf das Unterverzeichnis abgestimmt.
Und das war's :) Hoffentlich hilft das jemandem.