心理咨询网
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. <?php
  2. /**
  3. * @copyright (C)2016-2099 Hnaoyun Inc.
  4. * @author XingMeng
  5. * @email hnxsh@foxmail.com
  6. * @date 2017年10月15日
  7. * 配置信息读取类
  8. */
  9. namespace core\basic;
  10. class Config
  11. {
  12. // 存储配置信息
  13. protected static $configs;
  14. // 直接获取配置参数
  15. public static function get($item = null, $array = false)
  16. {
  17. // 自动载入配置文件
  18. if (! isset(self::$configs)) {
  19. self::$configs = self::loadConfig();
  20. }
  21. // 返回全部配置
  22. if ($item === null) {
  23. return self::$configs;
  24. }
  25. $items = explode('.', $item);
  26. if (isset(self::$configs[$items[0]])) {
  27. $value = self::$configs[$items[0]];
  28. } else {
  29. return null;
  30. }
  31. $items_len = count($items);
  32. for ($i = 1; $i < $items_len; $i ++) {
  33. if (isset($value[$items[$i]])) {
  34. $value = $value[$items[$i]];
  35. } else {
  36. return null;
  37. }
  38. }
  39. // 强制返回数据为数组形式
  40. if ($array && ! is_array($value)) {
  41. if ($value) {
  42. $value = explode(',', $value);
  43. $value = array_map('trim', $value); // 去空格
  44. } else {
  45. $value = array();
  46. }
  47. }
  48. return $value;
  49. }
  50. // 写入配置文件
  51. public static function set($itemName, array $data, $multistage = false, $assign = true)
  52. {
  53. if ($data) {
  54. $path = RUN_PATH . '/config/' . $itemName . '.php';
  55. // 是否使用多级
  56. if ($multistage) {
  57. // 如果获取到配置信息,执行合并
  58. if (! ! $configs = self::get($itemName)) {
  59. $data = mult_array_merge($configs, $data);
  60. }
  61. $config[$itemName] = $data;
  62. } else {
  63. $config = $data;
  64. }
  65. // 写入
  66. if (check_file($path, true)) {
  67. $result = file_put_contents($path, "<?php\nreturn " . var_export($config, true) . ";");
  68. if ($assign) { // 缓存后是否注入配置
  69. self::assign($path);
  70. }
  71. return $result;
  72. } else {
  73. return false;
  74. }
  75. }
  76. }
  77. // 载入配置文件
  78. private static function loadConfig()
  79. {
  80. // 载入配置惯性文件
  81. if (file_exists(CORE_PATH . '/convention.php')) {
  82. $configs = require CORE_PATH . '/convention.php';
  83. } else {
  84. die('系统框架文件丢失,惯性配置文件不存在!');
  85. }
  86. // 载入用户主配置文件
  87. if (file_exists(CONF_PATH . '/config.php')) {
  88. $config = require CONF_PATH . '/config.php';
  89. $configs = mult_array_merge($configs, $config);
  90. }
  91. // 载入用户数据库配置文件
  92. if (file_exists(CONF_PATH . '/database.php')) {
  93. $config = require CONF_PATH . '/database.php';
  94. $configs = mult_array_merge($configs, $config);
  95. }
  96. // 载入用户路由配置文件
  97. if (file_exists(CONF_PATH . '/route.php')) {
  98. $config = require CONF_PATH . '/route.php';
  99. $configs = mult_array_merge($configs, $config);
  100. }
  101. // 载入扩展的配置文件
  102. $ext_path = CONF_PATH . '/ext';
  103. if (is_dir($ext_path) && function_exists('scandir')) {
  104. $files = scandir($ext_path);
  105. for ($i = 0; $i < count($files); $i ++) {
  106. $file = $ext_path . '/' . $files[$i];
  107. if (is_file($file)) {
  108. $config = require $file;
  109. $configs = mult_array_merge($configs, $config);
  110. }
  111. }
  112. }
  113. // 载入系统路由文件
  114. if (file_exists(APP_PATH . '/common/route.php')) {
  115. $config = require APP_PATH . '/common/route.php';
  116. $configs = mult_array_merge($configs, $config);
  117. }
  118. // 载入应用版本文件
  119. if (file_exists(APP_PATH . '/common/version.php')) {
  120. $config = require APP_PATH . '/common/version.php';
  121. $configs = mult_array_merge($configs, $config);
  122. }
  123. // 载入系统配置缓存
  124. if (file_exists(RUN_PATH . '/config/' . md5('config') . '.php')) {
  125. $config = require RUN_PATH . '/config/' . md5('config') . '.php';
  126. $configs = mult_array_merge($configs, $config);
  127. }
  128. // 载入区域配置缓存
  129. if (file_exists(RUN_PATH . '/config/' . md5('area') . '.php')) {
  130. $config = require RUN_PATH . '/config/' . md5('area') . '.php';
  131. $configs = mult_array_merge($configs, $config);
  132. }
  133. //载入分站配置缓存
  134. if (file_exists(RUN_PATH . '/config/' . md5('city') . '.php')) {
  135. $config = require RUN_PATH . '/config/' . md5('city') . '.php';
  136. $configs = mult_array_merge($configs, $config);
  137. }
  138. // 清理缓冲区,避免配置文件出现Bom时影响显示
  139. @ob_clean();
  140. return $configs;
  141. }
  142. // 配置文件注入
  143. public static function assign($filePath)
  144. {
  145. if (! file_exists($filePath)) {
  146. return;
  147. }
  148. $assign_config = require $filePath;
  149. if (! is_array($assign_config))
  150. return;
  151. if (self::$configs) {
  152. $configs = mult_array_merge(self::$configs, $assign_config);
  153. } else {
  154. $configs = $assign_config;
  155. }
  156. self::$configs = $configs;
  157. return true;
  158. }
  159. }