rss_agent_hub/app.php

125 lines
4.5 KiB
PHP
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env php
<?php
// Загрузка автозагрузчика Composer (если есть)
if (file_exists(__DIR__ . '/vendor/autoload.php')) {
require_once __DIR__ . '/vendor/autoload.php';
} else {
// Простая реализация автозагрузки для нашего случая
spl_autoload_register(function ($class) {
$prefix = 'App\\';
$len = strlen($prefix);
if (strncmp($prefix, $class, $len) !== 0) {
return;
}
$relativeClass = substr($class, $len);
$file = __DIR__ . '/src/' . str_replace('\\', '/', $relativeClass) . '.php';
if (file_exists($file)) {
require $file;
}
});
}
use App\MigrationRunner;
// Загрузка переменных окружения через Dotenv
$envPath = __DIR__ . '/.env';
if (file_exists($envPath)) {
echo "Файл .env найден\n";
} else {
echo "Файл .env НЕ найден по пути: $envPath\n";
exit(1);
}
try {
$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 {
$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);
}