cms/config/database.php

63 lines
1.8 KiB
PHP

<?php
// Konfiguracja bazy danych
define('DB_HOST', 'localhost');
define('DB_NAME', 'cms_db');
define('DB_USER', 'root');
define('DB_PASS', '');
define('DB_CHARSET', 'utf8mb4');
// Konfiguracja aplikacji
define('SITE_URL', 'http://localhost/cms');
define('ADMIN_URL', SITE_URL . '/admin');
define('UPLOAD_DIR', __DIR__ . '/../assets/uploads/');
define('UPLOAD_URL', SITE_URL . '/assets/uploads/');
define('MAX_UPLOAD_SIZE', 5242880); // 5MB
// Bezpieczeństwo
define('SESSION_LIFETIME', 3600); // 1 godzina
define('HASH_ALGO', PASSWORD_DEFAULT);
class Database {
private static $instance = null;
private $connection;
private function __construct() {
try {
$dsn = "mysql:host=" . DB_HOST . ";dbname=" . DB_NAME . ";charset=" . DB_CHARSET;
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
$this->connection = new PDO($dsn, DB_USER, DB_PASS, $options);
} catch (PDOException $e) {
die("Błąd połączenia z bazą danych: " . $e->getMessage());
}
}
public static function getInstance() {
if (self::$instance === null) {
self::$instance = new self();
}
return self::$instance;
}
public function getConnection() {
return $this->connection;
}
// Zapobieganie klonowaniu
private function __clone() {}
// Zapobieganie deserializacji
public function __wakeup() {
throw new Exception("Nie można deserializować singletona");
}
}
// Inicjalizacja połączenia
function getDB() {
return Database::getInstance()->getConnection();
}
?>