Upload via GUI (267 Dateien)
This commit is contained in:
@@ -15,10 +15,38 @@ function config(): array
|
||||
if (getenv('DESKHUB_TESTING') === '1' && ($extra = json_decode((string) getenv('DESKHUB_CONFIG_JSON'), true)) && is_array($extra)) {
|
||||
$config = array_replace_recursive($config, $extra);
|
||||
}
|
||||
// Nur für die Testläufe (tests/run_all.php setzt DESKHUB_TESTS_FORCE_SQLITE): nie die in config/config.php eingetragene Datenbank
|
||||
// (zum Beispiel die Produktiv-MySQL) benutzen, sondern SQLite. In Test-Webservern nur mit einer vom Test gesetzten Datenbankdatei.
|
||||
if (getenv('DESKHUB_TESTS_FORCE_SQLITE') === '1') {
|
||||
$testDb = getenv('DESKHUB_SQLITE_PATH');
|
||||
if (PHP_SAPI === 'cli' || ($testDb !== false && $testDb !== '' && $testDb !== ':memory:')) {
|
||||
$config['db']['driver'] = 'sqlite';
|
||||
$config['db']['sqlite_path'] = $testDb !== false && $testDb !== '' ? $testDb : ':memory:';
|
||||
}
|
||||
}
|
||||
}
|
||||
return $config;
|
||||
}
|
||||
|
||||
/**
|
||||
* Die Datenbank ist nicht eingerichtet: Mit vorhandenem Installer dorthin weiterleiten, sonst eine verständliche Meldung.
|
||||
* Auf der Kommandozeile (Cron, Skripte) wird ein Fehler geworfen.
|
||||
*/
|
||||
function app_not_installed(): never
|
||||
{
|
||||
$message = 'DeskHub ist noch nicht eingerichtet: Die Datenbank fehlt. Bitte die Installation unter /install/ abschließen.';
|
||||
if (PHP_SAPI === 'cli') throw new RuntimeException($message);
|
||||
$installerOpen = is_file(__DIR__ . '/../install/index.php') && !is_file(__DIR__ . '/../install/.installed');
|
||||
if ($installerOpen && !headers_sent()) {
|
||||
header('Location: /install/');
|
||||
exit;
|
||||
}
|
||||
http_response_code(503);
|
||||
header('Content-Type: text/plain; charset=utf-8');
|
||||
exit($message . "
|
||||
");
|
||||
}
|
||||
|
||||
function get_db(): PDO
|
||||
{
|
||||
static $pdo = null;
|
||||
@@ -32,6 +60,13 @@ function get_db(): PDO
|
||||
$dbPath = $cfg['sqlite_path'];
|
||||
$needInit = !file_exists($dbPath) || filesize($dbPath) === 0;
|
||||
|
||||
// Eine SQLite-Datenbank wird nie nebenbei angelegt (z. B. durch den ersten Seitenaufruf mit einer mitgelieferten Konfiguration):
|
||||
// Das macht allein der Installer, wenn SQLite gewählt wurde. Nur Tests und Entwickler, die den Pfad ausdrücklich per
|
||||
// DESKHUB_SQLITE_PATH angeben, dürfen eine neue Datenbank erzeugen lassen.
|
||||
if ($needInit && $dbPath !== ':memory:' && (string) getenv('DESKHUB_SQLITE_PATH') === '') {
|
||||
app_not_installed();
|
||||
}
|
||||
|
||||
$pdo = new PDO('sqlite:' . $dbPath);
|
||||
$pdo->exec('PRAGMA journal_mode = WAL;');
|
||||
$pdo->exec('PRAGMA foreign_keys = ON;');
|
||||
|
||||
Reference in New Issue
Block a user