21 lines
945 B
PHP
21 lines
945 B
PHP
<?php
|
|
require_once __DIR__ . '/../config/lab.php';
|
|
class LabDb {
|
|
private static ?PDO $pdo = null;
|
|
public static function connection(): PDO {
|
|
if (self::$pdo) return self::$pdo;
|
|
$cfg = lab_config();
|
|
$dir = dirname($cfg['database']);
|
|
if (!is_dir($dir)) mkdir($dir, 0750, true);
|
|
$oldUmask = umask(0007);
|
|
$pdo = new PDO('sqlite:' . $cfg['database'], null, null, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC]);
|
|
umask($oldUmask);
|
|
$pdo->exec('PRAGMA journal_mode=WAL');
|
|
$pdo->exec('PRAGMA busy_timeout=5000');
|
|
$pdo->exec('PRAGMA foreign_keys=ON');
|
|
$pdo->exec((string)file_get_contents(dirname(__DIR__) . '/server/schema.sql'));
|
|
foreach ([$cfg['database'], $cfg['database'].'-wal', $cfg['database'].'-shm'] as $file) if (is_file($file)) @chmod($file, 0660);
|
|
return self::$pdo = $pdo;
|
|
}
|
|
}
|