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!

Ähnliche Artikel:

