Env.php
См. документацию.
1 <?php
2 
3 /**
4  * @file
5  * @brief установка переменных среды приложения
6  *
7  */
8 
9 namespace Wrong\Start;
10 
11 /**
12  * @brief Env класс управляющий, добавляющий или записывающий переменные среды
13  *
14  */
15 
16 class Env
17 {
18  /** путь к файлу переменных среды .env */
19  const PATH = __DIR__ . '/../../../.env';
20 
21  /** статическое свойство, которое используется для хранения экземпляра класса. */
22  public static $e;
23 
24  /**
25  * читает файл .env и устанавливает свойства класса в значения в файле .env
26  */
27  public function __construct()
28  {
29  file_exists(self::PATH) or exit('No such .env file');
30  foreach (parse_ini_file(self::PATH) as $prop => $value) {
31  $this->$prop = $value;
32  }
33  $this->IP = $this->ip();
34  $this->IS_SECURE = $this->is_secure();
35  $this->SYSTEM_SECRET_KEY = md5($this->DB_PASSWORD . $this->DB_DATABASE . __FILE__);
36  $this->IS_CLI = in_array(PHP_SAPI, array('cli', 'cli-server', 'phpdbg'));
37  $this->TEMP_PATH = realpath(__DIR__ .'/../../../temp');
38  self::$e = $this;
39  }
40 
41  /**
42  * Если пользователь находится за прокси, получить IP-адрес прокси, в противном случае получить
43  * IP-адрес пользователя
44  *
45  * @return string IP-адрес пользователя.
46  */
47  private function ip()
48  {
49  if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER) && !empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
50  if (strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ',') > 0) {
51  $addr = explode(",", $_SERVER['HTTP_X_FORWARDED_FOR']);
52  return trim($addr[0]);
53  } else {
54  return htmlspecialchars($_SERVER['HTTP_X_FORWARDED_FOR'], ENT_QUOTES);
55  }
56  } else {
57  return $_SERVER['REMOTE_ADDR'];
58  }
59  }
60 
61  /**
62  * Если сервер использует HTTPS, или если порт сервера — 443, или если для заголовка
63  * X-Forwarded-Proto установлено значение HTTPS, или если для заголовка посетителя Cloudflare
64  * установлено значение HTTPS, то вернуть истину
65  *
66  * @return bool Используется ли https
67  */
68  private function is_secure()
69  {
70  return (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')
71  || $_SERVER['SERVER_PORT'] == 443
72  || (!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
73  || (!empty($_SERVER['HTTP_CF_VISITOR']) && $_SERVER['HTTP_CF_VISITOR'] == '{"scheme":"https"}');
74  }
75 
76  /**
77  * записывает в .env файл переменные среды
78  *
79  * @param string $name Имя параметра, который вы хотите изменить.
80  * @param string|int $value Значение для установки параметра.
81  *
82  */
83  public function set($name, $value)
84  {
85  if (self::$e->$name == $value) return;
86  file_exists(self::PATH) && clearstatcache(true, self::PATH);
87  $file = new \SplFileObject(self::PATH, 'a+b');
88  $file->flock(LOCK_EX);
89  $file->rewind();
90  $data = $file->fread($file->getSize());
91  $arr = explode("\n", $data);
92  $rx = '#^' . $name . '=#i';
93  foreach ($arr as $k => $v) {
94  if (preg_match($rx, $v)) {
95  $arr[$k] = $name . '=' . $value;
96  }
97  }
98  $data = trim(implode("\n", $arr)) . "\n";
99  $file->ftruncate(0);
100  $file->fwrite($data);
101  $file->flock(LOCK_UN);
102  self::$e->$name = $value;
103  }
104 
105  /**
106  * принимает массив значений и добавляет их к объекту переменных среды, без записи в файл
107  *
108  * @param array $arr Массив параметров для добавления к объекту.
109  */
110  public static function add($arr)
111  {
112  foreach ($arr as $key => $value) {
113  self::$e->$key = $value;
114  }
115  if (!is_array(self::$e->GROUPS_USERS)) {
116  self::$e->GROUPS_USERS = json_decode(self::$e->GROUPS_USERS, true);
117  }
118  }
119 }
if($_POST['code']==file_get_contents($_SERVER['DOCUMENT_ROOT'] . $row->file)) $file
Definition: edit-code.php:30
if(! $response->_meta) $data
Definition: anycomment.php:18
Env класс управляющий, добавляющий или записывающий переменные среды
Definition: Env.php:17
static $e
Definition: Env.php:22
const PATH
Definition: Env.php:19
static add($arr)
Definition: Env.php:110
__construct()
Definition: Env.php:27
setcookie('FROM_UID', $uid, [ 'expires'=> time()+31536000, 'path'=> '/', 'domain'=> $_SERVER['HTTP_HOST'], 'secure'=> Wrong\Start\Env::$e->IS_SECURE, 'httponly'=> false, 'samesite'=> Wrong\Start\Env::$e->IS_SECURE ? 'None' :'Lax']) or setcookie('FROM_UID' Wrong Start Env::$e IS_SECURE
Definition: from-user.php:36
setcookie('FROM_UID', $uid, [ 'expires'=> time()+31536000, 'path'=> '/', 'domain'=> $_SERVER['HTTP_HOST'], 'secure'=> Wrong\Start\Env::$e->IS_SECURE, 'httponly'=> false, 'samesite'=> Wrong\Start\Env::$e->IS_SECURE ? 'None' :'Lax']) or setcookie('FROM_UID' $_SERVER['HTTP_HOST']
Definition: from-user.php:36
if(($dbh=Connect::getInstance(true) ->dbh) && $dbh->query("SHOW TABLES") ->fetchAll() && $dbh->query("SELECT COUNT(*) FROM `users`") ->fetchColumn()) if(!empty($_POST)) exit
Definition: install.php:198
$arr
Definition: actions.php:25