Env.php 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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 = true)
  18. {
  19. if (file_exists(ROOT_PATH . DS . $filename)) {
  20. $this->setAllValues($filename, $overload);
  21. } else { // 云函数或 Heroku 或 Railway 直接从 .env.example 读取默认环境变量
  22. $this->setAllValues('.env.example', $overload);
  23. }
  24. }
  25. /**
  26. * 读取并设置所有环境变量
  27. *
  28. * @param $filename
  29. * @param $overload
  30. *
  31. * @return void
  32. */
  33. private function setAllValues($filename, $overload)
  34. {
  35. $this->allValues = $overload ? Dotenv::create(ROOT_PATH, $filename)->overload() : Dotenv::create(ROOT_PATH, $filename)->load();
  36. }
  37. /**
  38. * 获取环境变量
  39. *
  40. * @param $key
  41. * @param $default
  42. *
  43. * @return array|bool|mixed|string|null
  44. */
  45. public function get($key = '', $default = null)
  46. {
  47. if (!strlen($key)) { // 不传 key 则返回所有环境变量
  48. return $this->allValues;
  49. }
  50. $value = getenv($key);
  51. if ($value === false) {
  52. return $default;
  53. }
  54. switch (strtolower($value)) {
  55. case 'true':
  56. case '(true)':
  57. return true;
  58. case 'false':
  59. case '(false)':
  60. return false;
  61. case 'empty':
  62. case '(empty)':
  63. return '';
  64. case 'null':
  65. case '(null)':
  66. return null;
  67. }
  68. if (($valueLength = strlen($value)) > 1 && $value[0] === '"' && $value[$valueLength - 1] === '"') { // 去除双引号
  69. return substr($value, 1, -1);
  70. }
  71. return $value;
  72. }
  73. }