mirror of
https://github.com/lkddi/nexusphp.git
synced 2026-04-14 04:20:49 +08:00
settings load from database and i18n from config files
This commit is contained in:
@@ -10,5 +10,9 @@ $showversion = " - Powered by ".PROJECTNAME;
|
||||
$rootpath=realpath(dirname(__FILE__) . '/..');
|
||||
set_include_path(get_include_path() . PATH_SEPARATOR . $rootpath);
|
||||
$rootpath .= "/";
|
||||
|
||||
require $rootpath . 'include/functions.php';
|
||||
require $rootpath . 'include/globalfunctions.php';
|
||||
require $rootpath . get_langfile_path("functions.php");
|
||||
require $rootpath . 'include/core.php';
|
||||
|
||||
|
||||
|
||||
@@ -4,18 +4,6 @@ define('NEXUS_START', microtime(true));
|
||||
define('IN_TRACKER', true);
|
||||
$rootpath=realpath(dirname(__FILE__) . '/..')."/";
|
||||
|
||||
require $rootpath . 'include/config.php';
|
||||
require $rootpath . 'include/functions.php';
|
||||
require $rootpath . 'include/globalfunctions.php';
|
||||
require $rootpath . get_langfile_path("functions.php");
|
||||
|
||||
require $rootpath . 'include/database/interface_db.php';
|
||||
require $rootpath . 'include/database/class_db_mysqli.php';
|
||||
require $rootpath . 'include/database/class_db.php';
|
||||
require $rootpath . 'include/database/helpers.php';
|
||||
require $rootpath . 'include/database/class_exception.php';
|
||||
|
||||
require $rootpath . 'classes/class_cache_redis.php';
|
||||
|
||||
require $rootpath . 'include/core.php';
|
||||
require $rootpath . 'include/functions_announce.php';
|
||||
require $rootpath . 'include/globalfunctions.php';
|
||||
require $rootpath . 'include/core.php';
|
||||
|
||||
@@ -2,33 +2,22 @@
|
||||
# IMPORTANT: Do not edit below unless you know what you are doing!
|
||||
if(!defined('IN_TRACKER'))
|
||||
die('Hacking attempt!');
|
||||
|
||||
/*
|
||||
$CONFIGURATIONS = array('ACCOUNT', 'ADVERTISEMENT', 'ATTACHMENT', 'AUTHORITY', 'BASIC', 'BONUS', 'CODE', 'MAIN', 'SECURITY', 'SMTP', 'TORRENT', 'TWEAK');
|
||||
|
||||
function ReadConfig ($configname = NULL) {
|
||||
static $allConfig;
|
||||
|
||||
global $CONFIGURATIONS;
|
||||
|
||||
if (is_null($allConfig)) {
|
||||
$configs = config();
|
||||
foreach ($configs as $name => $value) {
|
||||
$prefix = strtoupper(strstr($name, '.', true));
|
||||
$pureName = substr($name, strpos($name, '.') + 1);
|
||||
$GLOBALS[$prefix][$pureName] = $value;
|
||||
if ($configname) {
|
||||
$configname = basename($configname);
|
||||
$tmp = oldReadConfig($configname);
|
||||
WriteConfig($configname, $tmp);
|
||||
@unlink('./config/'.$configname);
|
||||
return $tmp;
|
||||
} else {
|
||||
foreach ($CONFIGURATIONS as $CONFIGURATION) {
|
||||
$GLOBALS[$CONFIGURATION] = ReadConfig($CONFIGURATION);
|
||||
}
|
||||
}
|
||||
dd($GLOBALS);
|
||||
// if ($configname) {
|
||||
// $configname = basename($configname);
|
||||
// $tmp = oldReadConfig($configname);
|
||||
// WriteConfig($configname, $tmp);
|
||||
// @unlink('./config/'.$configname);
|
||||
// return $tmp;
|
||||
// } else {
|
||||
// foreach ($CONFIGURATIONS as $CONFIGURATION) {
|
||||
// $GLOBALS[$CONFIGURATION] = ReadConfig($CONFIGURATION);
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
function oldReadConfig ($configname) {
|
||||
@@ -41,8 +30,7 @@ function oldReadConfig ($configname) {
|
||||
$configname = basename($configname);
|
||||
$path = './config/'.$configname;
|
||||
if (!file_exists($path)) {
|
||||
do_log($path);
|
||||
die("Error! File <b>".htmlspecialchars($configname)."</b> doesn't exist!</font><br /><font color=blue>Before the setup starts, please ensure that you have properly configured file and directory access permissions. Please see below.</font><br /><br />chmod 777 config/<br />chmod 777 config/".$configname);
|
||||
die("Error! File <b>".htmlspecialchars($configname)."</b> doesn't exist!</font><br /><font color=blue>Before the setup starts, please ensure that you have properly configured file and directory access permissions. Please see below.</font><br /><br />chmod 777 config/<br />chmod 777 config/".$configname);
|
||||
}
|
||||
|
||||
$fp = fopen($path, 'r');
|
||||
@@ -65,13 +53,27 @@ function oldReadConfig ($configname) {
|
||||
}
|
||||
}
|
||||
|
||||
ReadConfig();
|
||||
|
||||
//if (file_exists('config/allconfig.php')) {
|
||||
// require('config/allconfig.php');
|
||||
//} else {
|
||||
// ReadConfig();
|
||||
//}
|
||||
if (file_exists('config/allconfig.php')) {
|
||||
require('config/allconfig.php');
|
||||
} else {
|
||||
ReadConfig();
|
||||
}
|
||||
*/
|
||||
|
||||
//load settings from database
|
||||
if (basename($_SERVER['SCRIPT_FILENAME']) == 'announce.php') {
|
||||
dbconn_announce();
|
||||
} else {
|
||||
dbconn();
|
||||
}
|
||||
$settings = get_setting();
|
||||
foreach ($settings as $name => $value) {
|
||||
$prefix = strtoupper(strstr($name, '.', true));
|
||||
$pureName = substr($name, strpos($name, '.') + 1);
|
||||
$GLOBALS[$prefix][$pureName] = $value;
|
||||
}
|
||||
|
||||
$SITENAME = $BASIC['SITENAME'];
|
||||
$BASEURL = $BASIC['BASEURL'];
|
||||
$announce_urls = array();
|
||||
|
||||
@@ -3,9 +3,6 @@ if(!defined('IN_TRACKER'))
|
||||
die('Hacking attempt!');
|
||||
error_reporting(E_ALL);
|
||||
|
||||
require $rootpath . 'include/functions.php';
|
||||
require $rootpath . 'include/globalfunctions.php';
|
||||
|
||||
require $rootpath . 'include/database/interface_db.php';
|
||||
require $rootpath . 'include/database/class_db_mysqli.php';
|
||||
require $rootpath . 'include/database/class_db.php';
|
||||
@@ -14,12 +11,10 @@ require $rootpath . 'include/database/class_exception.php';
|
||||
|
||||
require $rootpath . 'classes/class_advertisement.php';
|
||||
require $rootpath . 'classes/class_cache_redis.php';
|
||||
|
||||
require $rootpath . 'include/config.php';
|
||||
require $rootpath . get_langfile_path("functions.php");
|
||||
|
||||
|
||||
ini_set('display_errors', $TWEAK['display_errors']);
|
||||
|
||||
$Cache = new RedisCache(); //Load the caching class
|
||||
$Cache->setLanguageFolderArray(get_langfolder_list());
|
||||
define('TIMENOW', time());
|
||||
|
||||
@@ -8,6 +8,8 @@ class DB
|
||||
|
||||
private static $queries = [];
|
||||
|
||||
private $isConnected = false;
|
||||
|
||||
private function __construct()
|
||||
{
|
||||
|
||||
@@ -39,9 +41,11 @@ class DB
|
||||
|
||||
public function connect($host, $username, $password, $database, $port)
|
||||
{
|
||||
if (is_null($this->driver)) {
|
||||
if (!$this->isConnected) {
|
||||
$this->driver->connect($host, $username, $password, $database, $port);
|
||||
$this->isConnected = true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public function query(string $sql)
|
||||
@@ -112,7 +116,7 @@ class DB
|
||||
|
||||
public function isConnected()
|
||||
{
|
||||
return !is_null($this->driver);
|
||||
return $this->isConnected;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1720,32 +1720,20 @@ function dbconn($autoclean = false)
|
||||
if (DB::getInstance()->isConnected()) {
|
||||
return;
|
||||
}
|
||||
global $lang_functions;
|
||||
global $mysql_host, $mysql_user, $mysql_pass, $mysql_db;
|
||||
global $useCronTriggerCleanUp;
|
||||
global $BASIC;
|
||||
|
||||
if (!mysql_connect($mysql_host, $mysql_user, $mysql_pass, $BASIC['mysql_db'], $BASIC['mysql_port']))
|
||||
$config = config('database.mysql');
|
||||
if (!mysql_connect($config['host'], $config['username'], $config['password'], $config['database'], $config['port']))
|
||||
{
|
||||
switch (mysql_errno())
|
||||
{
|
||||
case 1040:
|
||||
case 2002:
|
||||
die("<html><head><meta http-equiv=refresh content=\"10 $_SERVER[REQUEST_URI]\"><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"></head><body><table border=0 width=100% height=100%><tr><td><h3 align=center>".$lang_functions['std_server_load_very_high']."</h3></td></tr></table></body></html>");
|
||||
default:
|
||||
die("[" . mysql_errno() . "] dbconn: mysql_connect: " . mysql_error());
|
||||
}
|
||||
die("[" . mysql_errno() . "] dbconn: mysql_connect: " . mysql_error());
|
||||
}
|
||||
mysql_query("SET NAMES UTF8");
|
||||
mysql_query("SET collation_connection = 'utf8_general_ci'");
|
||||
mysql_query("SET sql_mode=''");
|
||||
mysql_select_db($mysql_db) or die('dbconn: mysql_select_db: ' + mysql_error());
|
||||
|
||||
userlogin();
|
||||
|
||||
if (!$useCronTriggerCleanUp && $autoclean) {
|
||||
register_shutdown_function("autoclean");
|
||||
}
|
||||
// if (!$useCronTriggerCleanUp && $autoclean) {
|
||||
// register_shutdown_function("autoclean");
|
||||
// }
|
||||
}
|
||||
function get_user_row($id)
|
||||
{
|
||||
@@ -1773,9 +1761,6 @@ function get_user_row($id)
|
||||
}
|
||||
|
||||
function userlogin() {
|
||||
if (isset($GLOBALS['CURUSER'])) {
|
||||
return;
|
||||
}
|
||||
global $lang_functions;
|
||||
global $Cache;
|
||||
global $SITE_ONLINE, $oldip;
|
||||
@@ -4363,224 +4348,4 @@ function return_category_image($categoryid, $link="")
|
||||
return $catimg;
|
||||
}
|
||||
|
||||
|
||||
function strip_magic_quotes($arr)
|
||||
{
|
||||
foreach ($arr as $k => $v)
|
||||
{
|
||||
if (is_array($v))
|
||||
{
|
||||
$arr[$k] = strip_magic_quotes($v);
|
||||
} else {
|
||||
$arr[$k] = stripslashes($v);
|
||||
}
|
||||
}
|
||||
return $arr;
|
||||
}
|
||||
|
||||
if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc())
|
||||
{
|
||||
if (!empty($_GET)) {
|
||||
$_GET = strip_magic_quotes($_GET);
|
||||
}
|
||||
if (!empty($_POST)) {
|
||||
$_POST = strip_magic_quotes($_POST);
|
||||
}
|
||||
if (!empty($_COOKIE)) {
|
||||
$_COOKIE = strip_magic_quotes($_COOKIE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function get_langfolder_list()
|
||||
{
|
||||
//do not access db for speed up, or for flexibility
|
||||
return array("en", "chs", "cht", "ko", "ja");
|
||||
}
|
||||
|
||||
function dd($vars)
|
||||
{
|
||||
echo '<pre>';
|
||||
array_map(function ($var) {
|
||||
var_dump($var);
|
||||
}, func_get_args());
|
||||
echo '</pre>';
|
||||
exit(0);
|
||||
}
|
||||
|
||||
function do_log($log)
|
||||
{
|
||||
global $TWEAK;
|
||||
if (!empty($TWEAK['logging'])) {
|
||||
$backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2);
|
||||
$content = sprintf(
|
||||
"[%s] %s:%s %s%s%s %s%s",
|
||||
date('Y-m-d H:i:s'),
|
||||
$backtrace[0]['file'] ?? '',
|
||||
$backtrace[0]['line'] ?? '',
|
||||
$backtrace[1]['class'] ?? '',
|
||||
$backtrace[1]['type'] ?? '',
|
||||
$backtrace[1]['function'] ?? '',
|
||||
$log,
|
||||
PHP_EOL
|
||||
);
|
||||
file_put_contents($TWEAK['logging'], $content, FILE_APPEND);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* get translation for given name
|
||||
*
|
||||
* @author xiaomlove
|
||||
* @date 2021/1/11
|
||||
* @param null $name
|
||||
* @param null $prefix
|
||||
* @return mixed|string
|
||||
*/
|
||||
function __($name = null, $prefix = null)
|
||||
{
|
||||
static $i18n;
|
||||
static $i18nWithoutPrefix;
|
||||
$userLocale = get_langfolder_cookie();
|
||||
$defaultLocale = 'en';
|
||||
if (is_null($prefix)) {
|
||||
//get prefix from scripe name
|
||||
$prefix = basename($_SERVER['SCRIPT_NAME']);
|
||||
$prefix = strstr($prefix, '.php', true);
|
||||
}
|
||||
if (is_null($i18n)) {
|
||||
//get all in18 may be used, incldue user locale and default locale, and name in('_target', 'functions') (because they are common) or prefixed with given prefix
|
||||
$sql = "select locale, name, translation from i18n where locale in (" . sqlesc($userLocale) . ", " . sqlesc($defaultLocale) . ") and (name in ('_target', 'functions') or name like '{$prefix}%')";
|
||||
$result = sql_query($sql);
|
||||
while ($row = mysql_fetch_assoc($result)) {
|
||||
$i18n[$row['locale']][$row['name']] = $row['translation'];
|
||||
$i18nWithoutPrefix[$row['locale']][substr($row['name'], strpos($row['name'], '.') + 1)] = $row['translation'];
|
||||
}
|
||||
}
|
||||
if (is_null($name)) {
|
||||
return $i18nWithoutPrefix[$userLocale] ?? $i18nWithoutPrefix[$defaultLocale] ?? [];
|
||||
}
|
||||
$name = "$prefix.$name";
|
||||
return $i18n[$userLocale][$name] ?? $i18n[$defaultLocale][$name] ?? '';
|
||||
|
||||
}
|
||||
|
||||
function config($key, $default = null)
|
||||
{
|
||||
static $configs;
|
||||
if (is_null($configs)) {
|
||||
//get all configuration from config file
|
||||
$files = glob($rootpath . 'config/*.php');
|
||||
foreach ($files as $file) {
|
||||
$basename = basename($file);
|
||||
if ($basename != 'allconfig.php') {
|
||||
continue;
|
||||
}
|
||||
$values = require $file;
|
||||
$configPrefix = strstr($basename, '.php', true);
|
||||
foreach ($values as $key => $value) {
|
||||
$configs["$configPrefix.$key"] = $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $configs[$key] ?? $default;
|
||||
}
|
||||
|
||||
/**
|
||||
* get setting for given name and prefix
|
||||
*
|
||||
* $name == null and $prefix == null, return all
|
||||
* $name == null and $prefix != null, return with specified prefix, but the result's prefix will be stripped
|
||||
*
|
||||
* @author xiaomlove
|
||||
* @date 2021/1/11
|
||||
* @param null $name
|
||||
* @param null $prefix
|
||||
* @return array|mixed|string
|
||||
*/
|
||||
function get_setting($name = null, $prefix = null)
|
||||
{
|
||||
static $settings;
|
||||
if (is_null($settings)) {
|
||||
//get all settings from database
|
||||
$sql = "select config_name, config_value from configs";
|
||||
$result = sql_query($sql);
|
||||
while ($row = mysql_fetch_assoc($result)) {
|
||||
$value = $row['config_value'];
|
||||
$arr = json_decode($value, true);
|
||||
if (is_array($arr)) {
|
||||
$value = $arr;
|
||||
}
|
||||
$settings[$row['config_name']] = $value;
|
||||
}
|
||||
|
||||
}
|
||||
if (!is_null($name)) {
|
||||
if (!is_null($prefix)) {
|
||||
$name = "$prefix.$name";
|
||||
}
|
||||
return $settings[$name] ?? null;
|
||||
}
|
||||
if (is_null($prefix)) {
|
||||
return $settings;
|
||||
}
|
||||
$filtered = [];
|
||||
foreach ($settings as $name => $value) {
|
||||
if (preg_match("/^$prefix/", $name)) {
|
||||
$nameWithoutPrefix = substr($name, strpos($name, '.') + 1);
|
||||
$filtered[$nameWithoutPrefix] = $value;
|
||||
}
|
||||
}
|
||||
return $filtered;
|
||||
|
||||
}
|
||||
|
||||
function env($key, $default = null)
|
||||
{
|
||||
static $env;
|
||||
if (is_null($env)) {
|
||||
$envFile = $rootpath . '.env';
|
||||
if (!file_exists($envFile)) {
|
||||
throw new \RuntimeException(".env file is not exists in the root path.");
|
||||
}
|
||||
$fp = fopen($envFile, 'r');
|
||||
if ($fp === false) {
|
||||
throw new \RuntimeException(".env file: $envFile is not readable.");
|
||||
}
|
||||
while ($line = trim(fgets($fp))) {
|
||||
if (empty($line)) {
|
||||
continue;
|
||||
}
|
||||
$pos = strpos($line, '=');
|
||||
$key = normalize_env(mb_substr($line, 0, $pos, 'utf-8'));
|
||||
$value = normalize_env(mb_substr($line, $pos + 1, null, 'utf-8'));
|
||||
$env[$key] = $value;
|
||||
}
|
||||
}
|
||||
return $env[$key] ?? $default;
|
||||
|
||||
}
|
||||
|
||||
function normalize_env($value)
|
||||
{
|
||||
$value = trim($value);
|
||||
$toStrip = ['\'', '"'];
|
||||
if (in_array(mb_substr($value, 0, 1, 'utf-8'), $toStrip)) {
|
||||
$value = mb_substr($value, 1, null, 'utf-8');
|
||||
}
|
||||
if (in_array(mb_substr($value, -1, 'utf-8'), $toStrip)) {
|
||||
$value = mb_substr($value, 0, -1, 'utf-8');
|
||||
}
|
||||
switch (strtolower($value)) {
|
||||
case 'true':
|
||||
return true;
|
||||
case 'false':
|
||||
return false;
|
||||
case 'null':
|
||||
return null;
|
||||
default:
|
||||
return $value;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
@@ -2,21 +2,18 @@
|
||||
# IMPORTANT: Do not edit below unless you know what you are doing!
|
||||
if(!defined('IN_TRACKER'))
|
||||
die('Hacking attempt!');
|
||||
include_once($rootpath . 'include/globalfunctions.php');
|
||||
include_once($rootpath . 'include/config.php');
|
||||
|
||||
function dbconn_announce() {
|
||||
global $mysql_host, $mysql_user, $mysql_pass, $mysql_db;
|
||||
global $BASIC;
|
||||
|
||||
if (!@mysql_connect($mysql_host, $mysql_user, $mysql_pass, $BASIC['mysql_db'], $BASIC['mysql_port']))
|
||||
$config = config('database.mysql');
|
||||
|
||||
if (!@mysql_connect($config['host'], $config['username'], $config['password'], $config['database'], $config['port']))
|
||||
{
|
||||
die('dbconn: mysql_connect: ' . mysql_error());
|
||||
}
|
||||
mysql_query("SET NAMES UTF8");
|
||||
mysql_query("SET collation_connection = 'utf8_general_ci'");
|
||||
mysql_query("SET sql_mode=''");
|
||||
mysql_select_db($mysql_db) or die('dbconn: mysql_select_db: ' + mysql_error());
|
||||
}
|
||||
|
||||
function hash_where_arr($name, $hash_arr) {
|
||||
|
||||
@@ -67,12 +67,12 @@ function getip() {
|
||||
|
||||
function sql_query($query)
|
||||
{
|
||||
$begin = getmicrotime();
|
||||
$begin = microtime(true);
|
||||
global $query_name;
|
||||
$result = mysql_query($query);
|
||||
$query_name[] = [
|
||||
'query' => $query,
|
||||
'time' => sprintf('%.3f', getmicrotime() - $begin),
|
||||
'time' => microtime(true) - $begin,
|
||||
];
|
||||
return $result;
|
||||
}
|
||||
@@ -93,4 +93,254 @@ function hash_where($name, $hash) {
|
||||
$shhash = preg_replace('/ *$/s', "", $hash);
|
||||
return "($name = " . sqlesc($hash) . " OR $name = " . sqlesc($shhash) . ")";
|
||||
}
|
||||
|
||||
|
||||
function strip_magic_quotes($arr)
|
||||
{
|
||||
foreach ($arr as $k => $v)
|
||||
{
|
||||
if (is_array($v))
|
||||
{
|
||||
$arr[$k] = strip_magic_quotes($v);
|
||||
} else {
|
||||
$arr[$k] = stripslashes($v);
|
||||
}
|
||||
}
|
||||
return $arr;
|
||||
}
|
||||
|
||||
if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc())
|
||||
{
|
||||
if (!empty($_GET)) {
|
||||
$_GET = strip_magic_quotes($_GET);
|
||||
}
|
||||
if (!empty($_POST)) {
|
||||
$_POST = strip_magic_quotes($_POST);
|
||||
}
|
||||
if (!empty($_COOKIE)) {
|
||||
$_COOKIE = strip_magic_quotes($_COOKIE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function get_langfolder_list()
|
||||
{
|
||||
//do not access db for speed up, or for flexibility
|
||||
return array("en", "chs", "cht", "ko", "ja");
|
||||
}
|
||||
|
||||
function printLine($line, $exist = false)
|
||||
{
|
||||
echo "[" . date('Y-m-d H:i:s') . "] $line<br />";
|
||||
if ($exist) {
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
function dd($vars)
|
||||
{
|
||||
echo '<pre>';
|
||||
array_map(function ($var) {
|
||||
var_dump($var);
|
||||
}, func_get_args());
|
||||
echo '</pre>';
|
||||
exit(0);
|
||||
}
|
||||
|
||||
function do_log($log)
|
||||
{
|
||||
global $TWEAK;
|
||||
if (!empty($TWEAK['logging'])) {
|
||||
$backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2);
|
||||
$content = sprintf(
|
||||
"[%s] %s:%s %s%s%s %s%s",
|
||||
date('Y-m-d H:i:s'),
|
||||
$backtrace[0]['file'] ?? '',
|
||||
$backtrace[0]['line'] ?? '',
|
||||
$backtrace[1]['class'] ?? '',
|
||||
$backtrace[1]['type'] ?? '',
|
||||
$backtrace[1]['function'] ?? '',
|
||||
$log,
|
||||
PHP_EOL
|
||||
);
|
||||
file_put_contents($TWEAK['logging'], $content, FILE_APPEND);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* get translation for given name
|
||||
*
|
||||
* @author xiaomlove
|
||||
* @date 2021/1/11
|
||||
* @param null $name
|
||||
* @param null $prefix
|
||||
* @return mixed|string
|
||||
*/
|
||||
function __($name = null, $prefix = null)
|
||||
{
|
||||
static $i18n;
|
||||
static $i18nWithoutPrefix;
|
||||
$userLocale = get_langfolder_cookie();
|
||||
$defaultLocale = 'en';
|
||||
if (is_null($prefix)) {
|
||||
//get prefix from scripe name
|
||||
$prefix = basename($_SERVER['SCRIPT_NAME']);
|
||||
$prefix = strstr($prefix, '.php', true);
|
||||
}
|
||||
if (is_null($i18n)) {
|
||||
//get all in18 may be used, incldue user locale and default locale, and name in('_target', 'functions') (because they are common) or prefixed with given prefix
|
||||
$sql = "select locale, name, translation from i18n where locale in (" . sqlesc($userLocale) . ", " . sqlesc($defaultLocale) . ") and (name in ('_target', 'functions') or name like '{$prefix}%')";
|
||||
$result = sql_query($sql);
|
||||
while ($row = mysql_fetch_assoc($result)) {
|
||||
$i18n[$row['locale']][$row['name']] = $row['translation'];
|
||||
$i18nWithoutPrefix[$row['locale']][substr($row['name'], strpos($row['name'], '.') + 1)] = $row['translation'];
|
||||
}
|
||||
}
|
||||
if (is_null($name)) {
|
||||
return $i18nWithoutPrefix[$userLocale] ?? $i18nWithoutPrefix[$defaultLocale] ?? [];
|
||||
}
|
||||
$name = "$prefix.$name";
|
||||
return $i18n[$userLocale][$name] ?? $i18n[$defaultLocale][$name] ?? '';
|
||||
|
||||
}
|
||||
|
||||
function config($key, $default = null)
|
||||
{
|
||||
global $rootpath;
|
||||
static $configs;
|
||||
if (is_null($configs)) {
|
||||
//get all configuration from config file
|
||||
$files = glob($rootpath . 'config/*.php');
|
||||
foreach ($files as $file) {
|
||||
$basename = basename($file);
|
||||
if ($basename == 'allconfig.php') {
|
||||
//exclude the NexusPHP default config file
|
||||
continue;
|
||||
}
|
||||
$values = require $file;
|
||||
$configPrefix = strstr($basename, '.php', true);
|
||||
$configs[$configPrefix] = $values;
|
||||
}
|
||||
}
|
||||
return arr_get($configs, $key, $default);
|
||||
}
|
||||
|
||||
/**
|
||||
* get setting for given name and prefix
|
||||
*
|
||||
* $name == null and $prefix == null, return all
|
||||
* $name == null and $prefix != null, return with specified prefix, but the result's prefix will be stripped
|
||||
*
|
||||
* @author xiaomlove
|
||||
* @date 2021/1/11
|
||||
* @param null $name
|
||||
* @param null $prefix
|
||||
* @return array|mixed|string
|
||||
*/
|
||||
function get_setting($name = null, $prefix = null)
|
||||
{
|
||||
static $settings;
|
||||
if (is_null($settings)) {
|
||||
//get all settings from database
|
||||
$sql = "select config_name, config_value from configs";
|
||||
$result = sql_query($sql);
|
||||
while ($row = mysql_fetch_assoc($result)) {
|
||||
$value = $row['config_value'];
|
||||
$arr = json_decode($value, true);
|
||||
if (is_array($arr)) {
|
||||
$value = $arr;
|
||||
}
|
||||
$settings[$row['config_name']] = $value;
|
||||
}
|
||||
|
||||
}
|
||||
if (!is_null($name)) {
|
||||
if (!is_null($prefix)) {
|
||||
$name = "$prefix.$name";
|
||||
}
|
||||
return $settings[$name] ?? null;
|
||||
}
|
||||
if (is_null($prefix)) {
|
||||
return $settings;
|
||||
}
|
||||
$filtered = [];
|
||||
foreach ($settings as $name => $value) {
|
||||
if (preg_match("/^$prefix/", $name)) {
|
||||
$nameWithoutPrefix = substr($name, strpos($name, '.') + 1);
|
||||
$filtered[$nameWithoutPrefix] = $value;
|
||||
}
|
||||
}
|
||||
return $filtered;
|
||||
|
||||
}
|
||||
|
||||
function env($key, $default = null)
|
||||
{
|
||||
global $rootpath;
|
||||
static $env;
|
||||
if (is_null($env)) {
|
||||
$envFile = $rootpath . '.env';
|
||||
if (!file_exists($envFile)) {
|
||||
throw new \RuntimeException(".env file is not exists in the root path.");
|
||||
}
|
||||
$fp = fopen($envFile, 'r');
|
||||
if ($fp === false) {
|
||||
throw new \RuntimeException(".env file: $envFile is not readable.");
|
||||
}
|
||||
while ($line = trim(fgets($fp))) {
|
||||
if (empty($line)) {
|
||||
continue;
|
||||
}
|
||||
$pos = strpos($line, '=');
|
||||
if ($pos <= 0) {
|
||||
continue;
|
||||
}
|
||||
if (mb_substr($line, 0, 1, 'utf-8') == '#') {
|
||||
continue;
|
||||
}
|
||||
$lineKey = normalize_env(mb_substr($line, 0, $pos, 'utf-8'));
|
||||
$lineValue = normalize_env(mb_substr($line, $pos + 1, null, 'utf-8'));
|
||||
$env[$lineKey] = $lineValue;
|
||||
}
|
||||
}
|
||||
return $env[$key] ?? $default;
|
||||
|
||||
}
|
||||
|
||||
function normalize_env($value)
|
||||
{
|
||||
$value = trim($value);
|
||||
$toStrip = ['\'', '"'];
|
||||
if (in_array(mb_substr($value, 0, 1, 'utf-8'), $toStrip)) {
|
||||
$value = mb_substr($value, 1, null, 'utf-8');
|
||||
}
|
||||
if (in_array(mb_substr($value, -1, null,'utf-8'), $toStrip)) {
|
||||
$value = mb_substr($value, 0, -1, 'utf-8');
|
||||
}
|
||||
switch (strtolower($value)) {
|
||||
case 'true':
|
||||
return true;
|
||||
case 'false':
|
||||
return false;
|
||||
case 'null':
|
||||
return null;
|
||||
default:
|
||||
return $value;
|
||||
}
|
||||
}
|
||||
|
||||
function arr_get($array, $key, $default = null)
|
||||
{
|
||||
if (strpos($key, '.') === false) {
|
||||
return $array[$key] ?? $default;
|
||||
}
|
||||
foreach (explode('.', $key) as $segment) {
|
||||
if (isset($array[$segment])) {
|
||||
$array = $array[$segment];
|
||||
} else {
|
||||
return $default;
|
||||
}
|
||||
}
|
||||
return $array;
|
||||
}
|
||||
?>
|
||||
|
||||
Reference in New Issue
Block a user