Env.php 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <?php
  2. /**
  3. * 环境变量
  4. *
  5. * @author mybsdc <[email protected]>
  6. * @date 2019/6/2
  7. * @time 17:28
  8. */
  9. namespace Luolongfei\Libs;
  10. use Dotenv\Dotenv;
  11. class Env extends Base
  12. {
  13. /**
  14. * @var array 环境变量值
  15. */
  16. protected $allValues = [];
  17. public function init($fileName = '.env', $overload = false)
  18. {
  19. if (file_exists(ROOT_PATH . DS . $fileName)) {
  20. $this->allValues = $overload ? Dotenv::create(ROOT_PATH, $fileName)->overload() : Dotenv::create(ROOT_PATH, $fileName)->load();
  21. } else if (IS_SCF) { // 云函数直接从 .env.example 读取默认环境变量
  22. $fileName = '.env.example';
  23. if (file_exists(ROOT_PATH . DS . $fileName)) {
  24. $this->allValues = $overload ? Dotenv::create(ROOT_PATH, $fileName)->overload() : Dotenv::create(ROOT_PATH, $fileName)->load();
  25. }
  26. }
  27. }
  28. public function get($key = '', $default = null)
  29. {
  30. if (!strlen($key)) { // 不传 key 则返回所有环境变量
  31. return $this->allValues;
  32. }
  33. $value = getenv($key);
  34. if ($value === false) {
  35. return $default;
  36. }
  37. switch (strtolower($value)) {
  38. case 'true':
  39. case '(true)':
  40. return true;
  41. case 'false':
  42. case '(false)':
  43. return false;
  44. case 'empty':
  45. case '(empty)':
  46. return '';
  47. case 'null':
  48. case '(null)':
  49. return null;
  50. }
  51. if (($valueLength = strlen($value)) > 1 && $value[0] === '"' && $value[$valueLength - 1] === '"') { // 去除双引号
  52. return substr($value, 1, -1);
  53. }
  54. return $value;
  55. }
  56. }