MoodleMU: Die Zweite (nun geht es definitiv)
Mittwoch 6. Januar 2010 von Maik Riecken
Warum es in diesem Artikel geht, erfahrt ihr hier. Dieser Code läuft, u.a. weil er von Martin Langhoff ist. Den Originalthread findet man hier – hätte ich man erst auf moodle.org gesucht… Ich habe die dort geposteten Dateien noch einmal tüchtig eingedampft. Der Ausgangspunkt sind wieder zwei Subdomains:
http://heim.domain.tld
http://schule.domain.tld
Der Unterschied zu meiner ersten Lösung besteht darin, dass im Prinzip nun jede Moodleinstallation ihre eigene config.php erhält – über eine dynamische scheint es nicht zu laufen. Dazu braucht es wiederum eine modifizierte config.php:
<?php
# Hier gewinnen wir den ersten Domainteil der Subdomain
$domain_parts=explode(“.”, $_SERVER['HTTP_HOST']);
$instance=$domain_parts[0];
$instance = preg_replace(“/\W/”, “”, $instance);
unset ($CFG);
$CFG->dirroot=’/pfad/zum/moodleverzeichnis’;
// Allow file overrides for our domain
if (file_exists(“$CFG->dirroot/config_”.$instance.”.php”)) { // Do not edit
include_once(“$CFG->dirroot/config_”.$instance.”.php”);
$CFG->directorypermissions =00777;
} else {
die(‘Ungültige Subdomain’);
}
if (file_exists(“$CFG->dirroot/lib/setup.php”)) { // Do not edit
include_once(“$CFG->dirroot/lib/setup.php”);
} else {
if ($CFG->dirroot == dirname(__FILE__)) {
echo “<p>Could not find this file: $CFG->dirroot/lib/setup.php</p>”;
echo “<p>Are you sure all your files have been uploaded?</p>”;
} else {
echo “<p>Error detected in config.php</p>”;
echo “<p>Error in: \$CFG->dirroot = ‘$CFG->dirroot’;</p>”;
echo “<p>Try this: \$CFG->dirroot = ‘”.dirname(__FILE__).”‘;</p>”;
}
die;
}
?>
Neu ist jetzt, dass im gleichen Verzeichnis wie die config.php jetzt für jedes Moodlesystem eine Extradatei liegt, in unserem Beispiel mit den Namen:
config_heim.php
config_schule.php
Der Inhalt von config_heim.php lautet dann z.B.:
<?php
unset($CFG);
$CFG->dbtype = ‘mysql’;
$CFG->dbhost = ‘localhost’;
$CFG->dbname = ‘dbname’;
$CFG->dbuser = ‘dbuser’;
$CFG->dbpass = ‘dbpasswd;
$CFG->dbpersist = false;
$CFG->prefix = ‘mdl_’;
$CFG->wwwroot = ‘http://heim.domain.tld’;
$CFG->dirroot = ‘/pfad/zu/moodle’;
$CFG->dataroot = ‘/pfad/zum/datenverzeichnis’;
$CFG->admin = ‘admin’;
?>
Also einfach die obere config.php einsetzen und für jede Installation eine eigene config_name.php-Datei anlegen. Das läuft hinter einem Reverse Proxy, auf normalem Webspace, auf einem managed Server – wirklich.Eine Beispielinstallation (proof of concept) gibt es unter den Links:
Beide Systeme laufen unter der gleichen Codebasis hinter einem Reverse Proxy auf einem lighttpd-Webserver mit PHP als fastCGI.
Dort konnte ich die Codebasis unter /pfad/zu/moodle tatsächlich für beliebig viele Moodles nutzen und hatte völlig freie Wahl bei z.B. dem Pfad zum /moodledata-Verzeichnis oder beim Datenbanknamen – was zusätzlich einen kleinen Sicherheitsgewinn bedeutet. Meine vollständig dynamische Lösung aus dem vorherigen Artikel fand ich zwar eleganter, aber wenn Moodle das nicht will…
Viel Spaß damit!
Kategorie: Moodle, Tech-Talk | Keine Kommentare »
