load(); // 환경 변수 설정 //Application 관련 define('APP_ENV', $_ENV['APP_ENV'] ?? 'production'); define('APP_URL', $_ENV['APP_URL'] ?? 'http://localhost'); define('APP_NAME', $_ENV['APP_NAME'] ?? 'MyApp'); define('APP_VERSION', $_ENV['APP_VERSION'] ?? '1.0.0'); define('APP_TIMEZONE', $_ENV['APP_TIMEZONE'] ?? 'Asia/Seoul'); define('APP_LOCALE', $_ENV['APP_LOCALE'] ?? 'en'); define('APP_CHARSET', $_ENV['APP_CHARSET'] ?? 'UTF-8'); //디버그관련련 //APP_DEBUG는 true로 설정하면 디버그 모드로 작동합니다. define('APP_DEBUG', $_ENV['APP_DEBUG'] ?? false); define('APP_DEBUG_LEVEL', $_ENV['APP_DEBUG_LEVEL'] ?? 'error'); //Session 관련 define('APP_SESSION_DRIVER', $_ENV['APP_SESSION_DRIVER'] ?? 'file'); define('APP_SESSION_NAME', $_ENV['APP_SESSION_NAME'] ?? 'PHPSESSID'); define('APP_SESSION_LIFETIME', $_ENV['APP_SESSION_LIFETIME'] ?? 120); define('APP_SESSION_PATH', $_ENV['APP_SESSION_PATH'] ?? ROOT_PATH . '/writeable/sessions'); define('APP_SESSION_PERMISSION', $_ENV['APP_SESSION_PERMISSION'] ?? 0775); //Cookie 관련 define('APP_SESSION_COOKIE_PATH', $_ENV['APP_SESSION_COOKIE_PATH'] ?? '/'); define('APP_SESSION_COOKIE_EXPIRE', $_ENV['APP_SESSION_COOKIE_EXPIRE'] ?? 3600); define('APP_SESSION_COOKIE_DOMAIN', $_ENV['APP_SESSION_COOKIE_DOMAIN'] ?? null); define('APP_SESSION_COOKIE_SECURE', $_ENV['APP_SESSION_COOKIE_SECURE'] ?? false); define('APP_SESSION_COOKIE_HTTPONLY', $_ENV['APP_SESSION_COOKIE_HTTPONLY'] ?? true); define('APP_SESSION_USE_ONLY_COOKIES', $_ENV['APP_SESSION_USE_ONLY_COOKIES'] ?? true); define('APP_SESSION_USE_STRICT_MODE', $_ENV['APP_SESSION_USE_STRICT_MODE'] ?? true); define('APP_SESSION_USE_UNIQUE_ID', $_ENV['APP_SESSION_USE_UNIQUE_ID'] ?? false); define('APP_SESSION_USE_FLASH', $_ENV['APP_SESSION_USE_FLASH'] ?? true); define('APP_SESSION_USE_INPUT', $_ENV['APP_SESSION_USE_INPUT'] ?? true); //CSRF 관련 define('APP_SESSION_USE_CSRF', $_ENV['APP_SESSION_USE_CSRF'] ?? true); define('APP_SESSION_USE_CSRF_TOKEN', $_ENV['APP_SESSION_USE_CSRF_TOKEN'] ?? true); define('APP_SESSION_USE_CSRF_NAME', $_ENV['APP_SESSION_USE_CSRF_NAME'] ?? 'csrf_token'); define('APP_SESSION_USE_CSRF_EXPIRE', $_ENV['APP_SESSION_USE_CSRF_EXPIRE'] ?? 3600); define('APP_SESSION_USE_CSRF_EXCLUDE', $_ENV['APP_SESSION_USE_CSRF_EXCLUDE'] ?? []); define('APP_SESSION_USE_CSRF_EXCLUDE_METHOD', $_ENV['APP_SESSION_USE_CSRF_EXCLUDE_METHOD'] ?? ['GET', 'HEAD', 'OPTIONS']); define('APP_SESSION_USE_CSRF_EXCLUDE_URI', $_ENV['APP_SESSION_USE_CSRF_EXCLUDE_URI'] ?? []); //Log관련 define('APP_LOG_PATH', $_ENV['APP_LOG_PATH'] ?? ROOT_PATH . '/logs'); define('APP_LOG_PERMISSION', $_ENV['APP_LOG_PERMISSION'] ?? 0775); define('APP_LOG_LEVEL', $_ENV['APP_LOG_LEVEL'] ?? 'error'); define('APP_LOG_FORMAT', $_ENV['APP_LOG_FORMAT'] ?? 'text'); define('APP_LOG_MAX_SIZE', $_ENV['APP_LOG_MAX_SIZE'] ?? 1048576); // 1MB define('APP_LOG_MAX_FILES', $_ENV['APP_LOG_MAX_FILES'] ?? 5); define('APP_LOG_DATE_FORMAT', $_ENV['APP_LOG_DATE_FORMAT'] ?? 'Y-m-d H:i:s'); define('APP_LOG_CHANNEL', $_ENV['APP_LOG_CHANNEL'] ?? 'default'); define('APP_LOG_LEVELS', $_ENV['APP_LOG_LEVELS'] ?? [ 'emergency' => 0, 'alert' => 1, 'critical' => 2, 'error' => 3, 'warning' => 4, 'notice' => 5, 'info' => 6, 'debug' => 7, ]); define('APP_LOG_FORMATS', $_ENV['APP_LOG_FORMATS'] ?? [ 'text' => "{date} [{level}] {message}", 'json' => '{"date": "{date}", "level": "{level}", "message": "{message}"}', ]); define('APP_LOG_CHANNELS', $_ENV['APP_LOG_CHANNELS'] ?? [ 'default' => [ 'driver' => 'single', 'path' => APP_LOG_PATH . '/app.log', 'level' => APP_LOG_LEVEL, 'formatter' => APP_LOG_FORMAT, 'max_size' => APP_LOG_MAX_SIZE, 'max_files' => APP_LOG_MAX_FILES, ], ]); //Database 정보 define('DATABASE_DRIVER', $_ENV['DATABASE_DRIVER'] ?? $_SERVER['DATABASE_DRIVER'] ?? 'mysql'); define('DATABASE_HOST', $_ENV['DATABASE_HOST'] ?? $_SERVER['DATABASE_HOST'] ?? 'localhost'); define('DATABASE_DB', $_ENV['DATABASE_DB'] ?? $_SERVER['DATABASE_DB'] ?? 'test'); define('DATABASE_CHARSET', $_ENV['DATABASE_CHARSET'] ?? $_SERVER['DATABASE_CHARSET'] ?? 'utf8'); define('DATABASE_ID', $_ENV['DATABASE_ID'] ?? $_SERVER['DATABASE_ID'] ?? 'test'); define('DATABASE_PASSWORD', $_ENV['DATABASE_PASSWORD'] ?? $_SERVER['DATABASE_PASSWORD'] ?? 'test'); define('DATABASE_QUERY_DEBUG', $_ENV['DATABASE_QUERY_DEBUG'] ?? $_SERVER['DATABASE_QUERY_DEBUG'] ?? false); //View 관련 define('VIEW_PATH', $_ENV['VIEW_PATH'] ?? ROOT_PATH . '/views'); define('VIEW_CACHE_PATH', $_ENV['VIEW_CACHE_PATH'] ?? ROOT_PATH . '/cache/views'); define('VIEW_CACHE_ENABLED', $_ENV['VIEW_CACHE_ENABLED'] ?? true); define('VIEW_CACHE_LIFETIME', $_ENV['VIEW_CACHE_LIFETIME'] ?? 3600); define('VIEW_CACHE_DRIVER', $_ENV['VIEW_CACHE_DRIVER'] ?? 'file'); define('VIEW_CACHE_PREFIX', $_ENV['VIEW_CACHE_PREFIX'] ?? 'view_cache_'); define('VIEW_CACHE_SUFFIX', $_ENV['VIEW_CACHE_SUFFIX'] ?? '.php'); define('VIEW_CACHE_EXTENSION', $_ENV['VIEW_CACHE_EXTENSION'] ?? '.html'); if (APP_DEBUG) { error_reporting(E_ALL); ini_set('display_errors', '1'); } else { error_reporting(0); ini_set('display_errors', '0'); } parent::__construct(); } }