Некий код
class DotEnv
{
public function __construct(
private string $path,
private readonly string $separator = '='
)
{
$this->path = rtrim($this->path, '\/') . DIRECTORY_SEPARATOR;
}
public function load(string $file = '.env'): void
{
$file = $this->path . $file;
if (!is_file($file)) {
throw new Exception("Не найден файл настроек: $file");
}
$lines = file($file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach ($lines as $line) {
if (!str_contains($line, $this->separator)) {
continue;
}
list($key, $value) = explode($this->separator, $line, 2);
$key = trim($key);
$value = trim($value);
$_ENV[$key] = $value;
// а может быть делать так?
//putenv("$key=$value");
}
}
}
Как помещать данные в $_ENV: просто заполнить массив или через putenv()?
Доставалки (вроде работают):
if (!function_exists('env')) {
function env(string $key = '', mixed $default = null): mixed
{
return $key ? array_key_exists($key, $_ENV) ? $_ENV[$key] !== '' ? $_ENV[$key] : $default : false : $_ENV;
}
}
// второй параметр true, потому что нам нужны ТОЛЬКО ключи заполненные с помощью putenv, если такой вариант использовался
if (!function_exists('env')) {
function env(string $key, mixed $default = null): mixed
{
return getenv($key, true) ?: $default;
}
}
И ещё такой вопрос: почему я при filter_input(INPUT_ENV, 'ЛЮБОЙ_КЛЮЧ_ДАЖЕ_ЕСЛИ_ТАКОЙ_ЕСТЬ') получаю ВСЕГДА - null?