Config.php 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. <?php
  2. namespace WORKERMAN\Core\Lib;
  3. class Config
  4. {
  5. public $filename;
  6. public $config;
  7. protected static $instances = array();
  8. private function __construct($domain = 'main') {
  9. $folder = WORKERMAN_ROOT_DIR . 'Config';
  10. $filename = $folder . '/' . $domain;
  11. $filename .= '.ini';
  12. if (!file_exists($filename)) {
  13. throw new \Exception('Configuration file "' . $filename . '" not found');
  14. }
  15. $config = parse_ini_file($filename, true);
  16. if (!is_array($config) || empty($config)) {
  17. throw new \Exception('Invalid configuration file format');
  18. }
  19. $this->config = $config['main'];
  20. unset($config['main']);
  21. $this->config['workers'] = $config;
  22. $this->filename = realpath($filename);
  23. }
  24. public static function instance($domain = 'main')
  25. {
  26. if (empty(self::$instances[$domain])) {
  27. self::$instances[$domain] = new self($domain);
  28. }
  29. return self::$instances[$domain];
  30. }
  31. public static function get($uri, $domain = 'main')
  32. {
  33. $node = self::instance($domain)->config;
  34. $paths = explode('.', $uri);
  35. while (!empty($paths)) {
  36. $path = array_shift($paths);
  37. if (!isset($node[$path])) {
  38. return null;
  39. }
  40. $node = $node[$path];
  41. }
  42. return $node;
  43. }
  44. public static function reload()
  45. {
  46. self::$instances = array();
  47. }
  48. }