feat(security): support outside-webroot .env loading from /home/urukprize/.env
This commit is contained in:
@@ -14,6 +14,5 @@ return [
|
|||||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||||||
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
||||||
PDO::ATTR_EMULATE_PREPARES => false,
|
PDO::ATTR_EMULATE_PREPARES => false,
|
||||||
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci",
|
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|||||||
+21
-12
@@ -32,21 +32,30 @@ if (file_exists(__DIR__ . '/../vendor/autoload.php')) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. Load Environment Variables if Dotenv exists or read .env manually
|
// 2. Multi-Path Secure Environment Loader (Prioritizes Outside-Webroot .env on CloudPanel)
|
||||||
$envFile = __DIR__ . '/../.env';
|
$envCandidates = [
|
||||||
if (file_exists($envFile)) {
|
'/home/urukprize/.env', // 1. Production outside webroot on CloudPanel
|
||||||
$lines = file($envFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
|
dirname(__DIR__, 4) . '/.env', // 2. Dynamic 4-levels up from backend/public
|
||||||
foreach ($lines as $line) {
|
dirname(__DIR__, 2) . '/.env', // 3. Project root on Mac local dev (/uruk-prize/.env)
|
||||||
if (str_starts_with(trim($line), '#') || !str_contains($line, '=')) {
|
dirname(__DIR__, 1) . '/.env', // 4. Decoy / fallback inside backend
|
||||||
continue;
|
];
|
||||||
}
|
|
||||||
[$name, $val] = explode('=', $line, 2);
|
foreach ($envCandidates as $candidate) {
|
||||||
$name = trim($name);
|
if (file_exists($candidate) && is_readable($candidate) && filesize($candidate) > 0) {
|
||||||
$val = trim($val, " \t\n\r\0\x0B\"'");
|
$lines = file($candidate, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
|
||||||
if (!getenv($name)) {
|
foreach ($lines as $line) {
|
||||||
|
$line = trim($line);
|
||||||
|
if (str_starts_with($line, '#') || !str_contains($line, '=')) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
[$name, $val] = explode('=', $line, 2);
|
||||||
|
$name = trim($name);
|
||||||
|
$val = trim($val, " \t\n\r\0\x0B\"'");
|
||||||
putenv("$name=$val");
|
putenv("$name=$val");
|
||||||
$_ENV[$name] = $val;
|
$_ENV[$name] = $val;
|
||||||
|
$_SERVER[$name] = $val;
|
||||||
}
|
}
|
||||||
|
break; // Successfully loaded highest-priority environment file
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user