Fix DB connection in app.php - use same approach as public/index.php with Dotenv

This commit is contained in:
Vladimir Mirivlad 2026-02-06 15:11:27 +00:00
parent 8a4d30de1d
commit 23a8dbcaf6
1 changed files with 25 additions and 17 deletions

42
app.php
View File

@ -25,27 +25,35 @@ if (file_exists(__DIR__ . '/vendor/autoload.php')) {
use App\MigrationRunner; use App\MigrationRunner;
// Загрузка переменных окружения // Загрузка переменных окружения через Dotenv
if (file_exists(__DIR__ . '/.env')) { $envPath = __DIR__ . '/.env';
$lines = file(__DIR__ . '/.env', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); if (file_exists($envPath)) {
foreach ($lines as $line) { echo "Файл .env найден\n";
if (strpos($line, '=') !== false && strpos($line, '#') !== 0) { } else {
list($key, $value) = explode('=', $line, 2); echo "Файл .env НЕ найден по пути: $envPath\n";
$key = trim($key); exit(1);
$value = trim($value);
if (!isset($_ENV[$key])) {
$_ENV[$key] = $value;
}
}
}
} }
// Загрузка конфигурации БД try {
$config = require_once __DIR__ . '/config/database.php'; $dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
echo ".env файл успешно загружен\n";
} catch (Exception $e) {
echo "Ошибка при загрузке .env файла: " . $e->getMessage() . "\n";
exit(1);
}
// Получение параметров подключения из переменных окружения
$host = $_ENV['DB_HOST'] ?? $_SERVER['DB_HOST'] ?? getenv('DB_HOST') ?? 'localhost';
$dbname = $_ENV['DB_NAME'] ?? $_SERVER['DB_NAME'] ?? getenv('DB_NAME') ?? 'your_database_name';
$username = $_ENV['DB_USER'] ?? $_SERVER['DB_USER'] ?? getenv('DB_USER') ?? 'your_database_user';
$password = $_ENV['DB_PASS'] ?? $_SERVER['DB_PASS'] ?? getenv('DB_PASS') ?? 'your_secure_password';
echo "Подключение к БД: host=$host, dbname=$dbname, user=$username\n";
try { try {
$dsn = "mysql:host={$config['host']};dbname={$config['database']};charset=utf8mb4"; $dsn = "mysql:host=$host;dbname=$dbname;charset=utf8mb4";
$pdo = new PDO($dsn, $config['username'], $config['password'], [ $pdo = new PDO($dsn, $username, $password, [
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,