114 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			114 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| // +----------------------------------------------------------------------
 | |
| // | ThinkPHP [ WE CAN DO IT JUST THINK ]
 | |
| // +----------------------------------------------------------------------
 | |
| // | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
 | |
| // +----------------------------------------------------------------------
 | |
| // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
 | |
| // +----------------------------------------------------------------------
 | |
| // | Author: liu21st <liu21st@gmail.com>
 | |
| // +----------------------------------------------------------------------
 | |
| 
 | |
| namespace think;
 | |
| 
 | |
| class Env
 | |
| {
 | |
|     /**
 | |
|      * 环境变量数据
 | |
|      * @var array
 | |
|      */
 | |
|     protected $data = [];
 | |
| 
 | |
|     public function __construct()
 | |
|     {
 | |
|         $this->data = $_ENV;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * 读取环境变量定义文件
 | |
|      * @access public
 | |
|      * @param  string    $file  环境变量定义文件
 | |
|      * @return void
 | |
|      */
 | |
|     public function load($file)
 | |
|     {
 | |
|         $env = parse_ini_file($file, true);
 | |
|         $this->set($env);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * 获取环境变量值
 | |
|      * @access public
 | |
|      * @param  string    $name 环境变量名
 | |
|      * @param  mixed     $default  默认值
 | |
|      * @return mixed
 | |
|      */
 | |
|     public function get($name = null, $default = null, $php_prefix = true)
 | |
|     {
 | |
|         if (is_null($name)) {
 | |
|             return $this->data;
 | |
|         }
 | |
| 
 | |
|         $name = strtoupper(str_replace('.', '_', $name));
 | |
| 
 | |
|         if (isset($this->data[$name])) {
 | |
|             return $this->data[$name];
 | |
|         }
 | |
| 
 | |
|         return $this->getEnv($name, $default, $php_prefix);
 | |
|     }
 | |
| 
 | |
|     protected function getEnv($name, $default = null, $php_prefix = true)
 | |
|     {
 | |
|         if ($php_prefix) {
 | |
|             $name = 'PHP_' . $name;
 | |
|         }
 | |
| 
 | |
|         $result = getenv($name);
 | |
| 
 | |
|         if (false === $result) {
 | |
|             return $default;
 | |
|         }
 | |
| 
 | |
|         if ('false' === $result) {
 | |
|             $result = false;
 | |
|         } elseif ('true' === $result) {
 | |
|             $result = true;
 | |
|         }
 | |
| 
 | |
|         if (!isset($this->data[$name])) {
 | |
|             $this->data[$name] = $result;
 | |
|         }
 | |
| 
 | |
|         return $result;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * 设置环境变量值
 | |
|      * @access public
 | |
|      * @param  string|array  $env   环境变量
 | |
|      * @param  mixed         $value  值
 | |
|      * @return void
 | |
|      */
 | |
|     public function set($env, $value = null)
 | |
|     {
 | |
|         if (is_array($env)) {
 | |
|             $env = array_change_key_case($env, CASE_UPPER);
 | |
| 
 | |
|             foreach ($env as $key => $val) {
 | |
|                 if (is_array($val)) {
 | |
|                     foreach ($val as $k => $v) {
 | |
|                         $this->data[$key . '_' . strtoupper($k)] = $v;
 | |
|                     }
 | |
|                 } else {
 | |
|                     $this->data[$key] = $val;
 | |
|                 }
 | |
|             }
 | |
|         } else {
 | |
|             $name = strtoupper(str_replace('.', '_', $env));
 | |
| 
 | |
|             $this->data[$name] = $value;
 | |
|         }
 | |
|     }
 | |
| }
 |