"pgsql", Config::DB_HOST => "db", Config::DB_USER => "", Config::DB_NAME => "", Config::DB_PASS => "", Config::DB_PORT => "5432", Config::MYSQL_CHARSET => "UTF8", Config::SELF_URL_PATH => "", Config::SINGLE_USER_MODE => "", Config::SIMPLE_UPDATE_MODE => "", Config::PHP_EXECUTABLE => "/usr/bin/php", Config::LOCK_DIRECTORY => "lock", Config::CACHE_DIR => "cache", Config::ICONS_DIR => "feed-icons", Config::ICONS_URL => "feed-icons", Config::AUTH_AUTO_CREATE => "true", Config::AUTH_AUTO_LOGIN => "true", Config::FORCE_ARTICLE_PURGE => 0, Config::ENABLE_REGISTRATION => "", Config::SESSION_COOKIE_LIFETIME => 86400, Config::SMTP_FROM_NAME => "Tiny Tiny RSS", Config::SMTP_FROM_ADDRESS => "noreply@localhost", Config::DIGEST_SUBJECT => "[tt-rss] New headlines for last 24 hours", Config::CHECK_FOR_UPDATES => "true", Config::PLUGINS => "auth_internal", Config::LOG_DESTINATION => "sql", Config::LOCAL_OVERRIDE_STYLESHEET => "local-overrides.css", Config::DAEMON_MAX_CHILD_RUNTIME => 1800, Config::DAEMON_MAX_JOBS => 2, Config::FEED_FETCH_TIMEOUT => 45, Config::FEED_FETCH_NO_CACHE_TIMEOUT => 15, Config::FILE_FETCH_TIMEOUT => 45, Config::FILE_FETCH_CONNECT_TIMEOUT => 15, Config::DAEMON_UPDATE_LOGIN_LIMIT => 30, Config::DAEMON_FEED_LIMIT => 500, Config::DAEMON_SLEEP_INTERVAL => 120, Config::MAX_CACHE_FILE_SIZE => 64*1024*1024, Config::MAX_DOWNLOAD_FILE_SIZE => 16*1024*1024, Config::MAX_FAVICON_FILE_SIZE => 1*1024*1024, Config::CACHE_MAX_DAYS => 7, Config::MAX_CONDITIONAL_INTERVAL => 3600*12, Config::DAEMON_UNSUCCESSFUL_DAYS_LIMIT => 30, Config::LOG_SENT_MAIL => "", Config::HTTP_PROXY => "", Config::FORBID_PASSWORD_CHANGES => "", Config::TTRSS_SESSION_NAME => "ttrss_sid", ]; private static $instance; private $params = []; public static function get_instance() { if (self::$instance == null) self::$instance = new self(); return self::$instance; } function __construct() { $ref = new ReflectionClass(get_class($this)); foreach ($ref->getConstants() as $const => $cvalue) { if (strpos($const, "_") !== 0) { $override = getenv($this::_ENVVAR_PREFIX . $const); $this->params[$cvalue] = !empty($override) ? $override : $this::_DEFAULTS[$const]; } } } private function _get(string $param) { return $this->params[$param]; } private function _add(string $param, string $default) { $override = getenv($this::_ENVVAR_PREFIX . $param); $this->params[$param] = !empty($override) ? $override : $default; } static function add(string $param, string $default) { $instance = self::get_instance(); return $instance->_add($param, $default); } static function get(string $param) { $instance = self::get_instance(); return $instance->_get($param); } }