* @date 2019/6/2 * @time 17:28 */ namespace Luolongfei\Libs; use Dotenv\Dotenv; class Env extends Base { /** * @var array 环境变量值 */ protected $allValues = []; public function init($filename = '.env', $overload = false) { if (file_exists(ROOT_PATH . DS . $filename)) { $this->setAllValues($filename, $overload); } else { // 云函数或 Heroku 或 Railway 直接从 .env.example 读取默认环境变量 $this->setAllValues('.env.example', $overload); } } /** * 读取并设置所有环境变量 * * @param $filename * @param $overload * * @return void */ private function setAllValues($filename, $overload) { $this->allValues = $overload ? Dotenv::create(ROOT_PATH, $filename)->overload() : Dotenv::create(ROOT_PATH, $filename)->load(); } /** * 获取环境变量 * * @param $key * @param $default * * @return array|bool|mixed|string|null */ public function get($key = '', $default = null) { if (!strlen($key)) { // 不传 key 则返回所有环境变量 return $this->allValues; } $value = getenv($key); if ($value === false) { return $default; } switch (strtolower($value)) { case 'true': case '(true)': return true; case 'false': case '(false)': return false; case 'empty': case '(empty)': return ''; case 'null': case '(null)': return null; } if (($valueLength = strlen($value)) > 1 && $value[0] === '"' && $value[$valueLength - 1] === '"') { // 去除双引号 return substr($value, 1, -1); } return $value; } }