We are working on this right now. NOTE: You must understand PHP to apply this approach.
Our basic idea is this:
1) within the MediaWiki install folder, we create a "wsu" folder, to contain all files we add to MW (that makes it easier to upgrade when a new version of MW comes out).
2) Within the "wsu" folder, we make a folder for each wiki. These folders are named with the "wikiname" (= sitename) for the wiki. They might contain images or whatever is needed by that particular wiki. They also contain a file "LocalSettings_".wikiname.".php" which contains any special settings for that wiki that override or extend the common LocalSettings.php in the main Mediawiki install folder. So for "joshwiki", we have a folder "wsu/joshwiki" which contains "LocalSettings_joshwiki.php". [The file doesn't logically need to have the wikiname in its filename, but it makes it easier to keep track when you're editing.]
2) At the end of LocalSettings.php in the main MW folder, we determine which wiki was called by parsing the request URI, and store the result in a superglobal. [Note that we have a different $wgArticlePath and $wgScriptPath, in order to manage pretty URL's via our load balancer. Incoming URL's point to the 'wikishortname' + 'wk'; outgoing URL's point to 'wikishortname' + 'wiki'.]
if (!isset($GLOBALS['wsuWikiname'])) { $uri = $_SERVER['REQUEST_URI'];
# find first element of called URI preg_match("|^/(.*)wk/|",$uri,$matches); if ($matches) { $GLOBALS['wsuWikiname'] = $matches[1].'wiki'; $GLOBALS['wsuWikiuri'] = $matches[1].'wk'; error_log("wikishortname = $matches[1]"); } else { error_log("malformed URL: $uri"); } }
Then we require_once Local_Settings_wikiname.php for that wiki, which contains any needed overrides or additions to the common settings in LocalSettings.php:
# Choose the appropriate LocalSettings file for per-wiki overrides # per-wiki LocalSettings is places in per-wiki directory in wsu/ # require_once 'wsu/'.$GLOBALS['wsuWikiname'] . '/LocalSettings_' . $GLOBALS['wsuWikiname'] . '.php';
3) You have to be quite careful about settings with dependencies on other settings. Here is the tree I developed of dependencies in LocalSettings.php:
[Mediawiki 1.5.6] *Request URI **$GLOBALS['wsuWikiname'] ***$wgSitename ****$wgLocalInterWiki ***$wgDBname (yes, we generate the DB name from the wikiname) ***$wgArticlePath ***$wgDebugLogFile (separate debug log file for each wiki) ***per-wiki directory ***per-wiki local settings name **$GLOBALS['wsuWikiuri'] ***$wgScriptPath ****$wgScript ****$wgRedirectScript ****$wgStylePath ****$wgUploadPath
You don't want to do an override on a setting without also overriding the things that depend on it.
NOTE THAT THIS IS NOT YET RUNNING except on a limited basis in development. Only you are responsible if you believe what you read here, put it on a machine, and get hurt.
HTH,
-- Joshua
On 4/7/06 1:24 PM, "Rotem Liss" mail@rotemliss.com wrote:
I'm running three MediaWiki sites, and I copy the PHP files from folder to folder. Can I run them somehow from the same PHP files, so I won't need to copy and update all the files three times? By the way, how do you do that in Wikimedia sites - copy the PHP files, or using the same ones? And how do you do that?
(Of course, using different LocalSettings.php for every site, and running from other folders.)
rotemliss
MediaWiki-l mailing list MediaWiki-l@Wikimedia.org http://mail.wikipedia.org/mailman/listinfo/mediawiki-l