122 lines
5.6 KiB
PHP
122 lines
5.6 KiB
PHP
<?php
|
|
|
|
namespace lib\Configs;
|
|
|
|
use \lib\Core\App as Core;
|
|
use Dotenv\Dotenv;
|
|
|
|
class App extends Core
|
|
{
|
|
public function __construct()
|
|
{
|
|
// .env 파일 로드
|
|
$dotenv = Dotenv::createImmutable(ROOT_PATH);
|
|
$dotenv->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();
|
|
}
|
|
}
|