togethere.cloud/private_html/cron/archive_matches.php

107 lines
3.1 KiB
PHP

<?php
/**
* Automatyczna archiwizacja starych meczów
*
* Ten skrypt powinien być uruchamiany przez CRON co tydzień
* Przykład konfiguracji cron:
* 0 2 * * 0 php /path/to/private_html/cron/archive_matches.php
* (Każdą niedzielę o 2:00 w nocy)
*
* Lub w cPanel/Plesk:
* Czas: Co tydzień, niedziela, 02:00
* Komenda: php /home/username/public_html/private_html/cron/archive_matches.php
*/
// Zabezpieczenie - tylko CLI lub z localhost
if (php_sapi_name() !== 'cli') {
if (!isset($_SERVER['REMOTE_ADDR']) || $_SERVER['REMOTE_ADDR'] !== '127.0.0.1') {
die('Access denied - tylko z CLI lub localhost');
}
}
// Włączenie raportowania błędów
error_reporting(E_ALL);
ini_set('display_errors', 1);
ini_set('log_errors', 1);
ini_set('error_log', __DIR__ . '/archive_log.txt');
// Timeout 5 minut (archiwizacja może trwać długo)
set_time_limit(300);
// Konfiguracja bazy danych
$host = "localhost";
$db = "togethere_cloud";
$user = "root";
$pass = "HasloDoSQL";
// Funkcja logowania
function logMessage($message) {
$timestamp = date('Y-m-d H:i:s');
$logMessage = "[$timestamp] $message\n";
echo $logMessage;
error_log($logMessage, 3, __DIR__ . '/archive_log.txt');
}
try {
logMessage("=== START Archiwizacja meczów ===");
// Połączenie z bazą danych
$pdo->exec("SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci");
logMessage("Połączono z bazą danych");
// Wywołanie procedury archiwizacji
$stmt = $pdo->prepare("CALL archive_old_matches()");
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
if ($result && isset($result['result'])) {
logMessage("Wynik archiwizacji: " . $result['result']);
} else {
logMessage("Archiwizacja wykonana (brak rekordów do archiwizacji)");
}
// Sprawdź statystyki
$stmt = $pdo->query("
SELECT
'Active' as type, COUNT(*) as count
FROM matches
UNION ALL
SELECT
'Archived' as type, COUNT(*) as count
FROM matches_archive
");
$stats = $stmt->fetchAll(PDO::FETCH_ASSOC);
logMessage("Statystyki:");
foreach ($stats as $stat) {
logMessage(" - {$stat['type']}: {$stat['count']} meczów");
}
// Opcjonalnie: wyczyść stare logi (starsze niż 30 dni)
$logFile = __DIR__ . '/archive_log.txt';
if (file_exists($logFile) && filesize($logFile) > 5242880) { // 5MB
logMessage("Log przekroczył 5MB - rotacja logów");
$oldLog = __DIR__ . '/archive_log_old.txt';
if (file_exists($oldLog)) {
unlink($oldLog);
}
rename($logFile, $oldLog);
}
logMessage("=== END Archiwizacja zakończona pomyślnie ===\n");
exit(0); // Sukces
} catch (PDOException $e) {
logMessage("ERROR: Błąd bazy danych - " . $e->getMessage());
exit(1); // Błąd
} catch (Exception $e) {
logMessage("ERROR: " . $e->getMessage());
exit(1); // Błąd
}
?>