107 lines
3.1 KiB
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
|
|
}
|
|
?>
|
|
|