175 lines
5.4 KiB
PHP
175 lines
5.4 KiB
PHP
<?php
|
||
/**
|
||
* @copyright (C)2016-2099 Hnaoyun Inc.
|
||
* @author XingMeng
|
||
* @email hnxsh@foxmail.com
|
||
* @date 2017年10月15日
|
||
* 配置信息读取类
|
||
*/
|
||
namespace core\basic;
|
||
|
||
class Config
|
||
{
|
||
|
||
// 存储配置信息
|
||
protected static $configs;
|
||
|
||
// 直接获取配置参数
|
||
public static function get($item = null, $array = false)
|
||
{
|
||
// 自动载入配置文件
|
||
if (! isset(self::$configs)) {
|
||
self::$configs = self::loadConfig();
|
||
}
|
||
// 返回全部配置
|
||
if ($item === null) {
|
||
return self::$configs;
|
||
}
|
||
$items = explode('.', $item);
|
||
if (isset(self::$configs[$items[0]])) {
|
||
$value = self::$configs[$items[0]];
|
||
} else {
|
||
return null;
|
||
}
|
||
$items_len = count($items);
|
||
for ($i = 1; $i < $items_len; $i ++) {
|
||
if (isset($value[$items[$i]])) {
|
||
$value = $value[$items[$i]];
|
||
} else {
|
||
return null;
|
||
}
|
||
}
|
||
// 强制返回数据为数组形式
|
||
if ($array && ! is_array($value)) {
|
||
if ($value) {
|
||
$value = explode(',', $value);
|
||
$value = array_map('trim', $value); // 去空格
|
||
} else {
|
||
$value = array();
|
||
}
|
||
}
|
||
return $value;
|
||
}
|
||
|
||
// 写入配置文件
|
||
public static function set($itemName, array $data, $multistage = false, $assign = true)
|
||
{
|
||
if ($data) {
|
||
$path = RUN_PATH . '/config/' . $itemName . '.php';
|
||
|
||
// 是否使用多级
|
||
if ($multistage) {
|
||
// 如果获取到配置信息,执行合并
|
||
if (! ! $configs = self::get($itemName)) {
|
||
$data = mult_array_merge($configs, $data);
|
||
}
|
||
$config[$itemName] = $data;
|
||
} else {
|
||
$config = $data;
|
||
}
|
||
|
||
// 写入
|
||
if (check_file($path, true)) {
|
||
$result = file_put_contents($path, "<?php\nreturn " . var_export($config, true) . ";");
|
||
if ($assign) { // 缓存后是否注入配置
|
||
self::assign($path);
|
||
}
|
||
return $result;
|
||
} else {
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
|
||
// 载入配置文件
|
||
private static function loadConfig()
|
||
{
|
||
// 载入配置惯性文件
|
||
if (file_exists(CORE_PATH . '/convention.php')) {
|
||
$configs = require CORE_PATH . '/convention.php';
|
||
} else {
|
||
die('系统框架文件丢失,惯性配置文件不存在!');
|
||
}
|
||
|
||
// 载入用户主配置文件
|
||
if (file_exists(CONF_PATH . '/config.php')) {
|
||
$config = require CONF_PATH . '/config.php';
|
||
$configs = mult_array_merge($configs, $config);
|
||
}
|
||
|
||
// 载入用户数据库配置文件
|
||
if (file_exists(CONF_PATH . '/database.php')) {
|
||
$config = require CONF_PATH . '/database.php';
|
||
$configs = mult_array_merge($configs, $config);
|
||
}
|
||
|
||
// 载入用户路由配置文件
|
||
if (file_exists(CONF_PATH . '/route.php')) {
|
||
$config = require CONF_PATH . '/route.php';
|
||
$configs = mult_array_merge($configs, $config);
|
||
}
|
||
|
||
// 载入扩展的配置文件
|
||
$ext_path = CONF_PATH . '/ext';
|
||
if (is_dir($ext_path) && function_exists('scandir')) {
|
||
$files = scandir($ext_path);
|
||
for ($i = 0; $i < count($files); $i ++) {
|
||
$file = $ext_path . '/' . $files[$i];
|
||
if (is_file($file)) {
|
||
$config = require $file;
|
||
$configs = mult_array_merge($configs, $config);
|
||
}
|
||
}
|
||
}
|
||
|
||
// 载入系统路由文件
|
||
if (file_exists(APP_PATH . '/common/route.php')) {
|
||
$config = require APP_PATH . '/common/route.php';
|
||
$configs = mult_array_merge($configs, $config);
|
||
}
|
||
|
||
// 载入应用版本文件
|
||
if (file_exists(APP_PATH . '/common/version.php')) {
|
||
$config = require APP_PATH . '/common/version.php';
|
||
$configs = mult_array_merge($configs, $config);
|
||
}
|
||
|
||
// 载入系统配置缓存
|
||
if (file_exists(RUN_PATH . '/config/' . md5('config') . '.php')) {
|
||
$config = require RUN_PATH . '/config/' . md5('config') . '.php';
|
||
$configs = mult_array_merge($configs, $config);
|
||
}
|
||
|
||
// 载入区域配置缓存
|
||
if (file_exists(RUN_PATH . '/config/' . md5('area') . '.php')) {
|
||
$config = require RUN_PATH . '/config/' . md5('area') . '.php';
|
||
$configs = mult_array_merge($configs, $config);
|
||
}
|
||
|
||
// 清理缓冲区,避免配置文件出现Bom时影响显示
|
||
@ob_clean();
|
||
return $configs;
|
||
}
|
||
|
||
// 配置文件注入
|
||
public static function assign($filePath)
|
||
{
|
||
if (! file_exists($filePath)) {
|
||
return;
|
||
}
|
||
|
||
$assign_config = require $filePath;
|
||
if (! is_array($assign_config))
|
||
return;
|
||
|
||
if (self::$configs) {
|
||
$configs = mult_array_merge(self::$configs, $assign_config);
|
||
} else {
|
||
$configs = $assign_config;
|
||
}
|
||
self::$configs = $configs;
|
||
return true;
|
||
}
|
||
}
|
||
|