| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- <?php
- /**
- * 环境变量
- *
- * @author mybsdc <[email protected]>
- * @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)
- {
- $dotenv = $overload
- ? Dotenv::createUnsafeMutable(ROOT_PATH, $filename)
- : Dotenv::createUnsafeImmutable(ROOT_PATH, $filename);
- $this->allValues = $dotenv->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;
- }
- }
|