#!/usr/bin/env php 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 { $dsn = "mysql:host=$host;dbname=$dbname;charset=utf8mb4"; $pdo = new PDO($dsn, $username, $password, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]); } catch (PDOException $e) { die("Ошибка подключения к БД: " . $e->getMessage() . "\n"); } $migrationRunner = new MigrationRunner($pdo); // Обработка аргументов командной строки $command = $argv[1] ?? null; switch ($command) { case 'migrate': echo "Запуск миграций...\n"; $migrationRunner->migrate(); echo "Миграции завершены!\n"; break; case 'rollback': echo "Откат последней миграции...\n"; $migrationRunner->rollback(); echo "Откат завершен!\n"; break; case 'status': echo "Проверка статуса миграций...\n"; $stmt = $pdo->query("SELECT migration_name, applied_at FROM migrations ORDER BY applied_at ASC"); $appliedMigrations = $stmt->fetchAll(); if (empty($appliedMigrations)) { echo "Нет примененных миграций.\n"; } else { echo "Примененные миграции:\n"; foreach ($appliedMigrations as $migration) { echo "- {$migration['migration_name']} ({$migration['applied_at']})\n"; } } // Показать непримененные миграции $migrationFiles = glob(__DIR__ . '/migrations/*.php'); natsort($migrationFiles); $appliedNames = array_column($appliedMigrations, 'migration_name'); $unapplied = []; foreach ($migrationFiles as $file) { $name = basename($file, '.php'); if (!in_array($name, $appliedNames)) { $unapplied[] = $name; } } if (!empty($unapplied)) { echo "\nНепримененные миграции:\n"; foreach ($unapplied as $migration) { echo "- $migration\n"; } } break; default: echo "Использование: php app.php [migrate|rollback|status]\n"; echo " migrate - применить все непримененные миграции\n"; echo " rollback - откатить последнюю миграцию\n"; echo " status - показать статус миграций\n"; exit(1); }