false, 'error' => 'Authentication required', ]); exit; } // Pfad erneut bestimmen $uri = parse_url($_SERVER['REQUEST_URI'] ?? '/', PHP_URL_PATH); $path = rtrim($uri, '/'); // interne Routen switch ($path) { // Beispiel: Aggregierte Stats case '/internal/stats.overview': internal_stats_overview($pdo); break; // Beispiel: Wartung / Cleanup case '/internal/maintenance.cleanup-tests': internal_cleanup_tests($pdo); break; default: http_response_code(404); echo json_encode([ 'ok' => false, 'error' => 'Unknown internal endpoint', 'path' => $path, ], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); break; } /** * Beispiel: einfache Übersicht für Admin-Dashboard */ function internal_stats_overview(PDO $pdo): void { // alles nur Beispiel – du kannst die Queries anpassen $totalQuicktests = (int)$pdo->query("SELECT COUNT(*) FROM web_quicktests")->fetchColumn(); $lastTestsStmt = $pdo->query(" SELECT id, created_at, ip_address, measured_capacity_bytes FROM web_quicktests ORDER BY created_at DESC LIMIT 10 "); $lastTests = $lastTestsStmt ? $lastTestsStmt->fetchAll(PDO::FETCH_ASSOC) : []; echo json_encode([ 'ok' => true, 'stats' => [ 'total_quicktests' => $totalQuicktests, 'last_quicktests' => $lastTests, ], ], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); } /** * Beispiel: alte Tests aufräumen (z.B. älter als 90 Tage) */ function internal_cleanup_tests(PDO $pdo): void { // je nach Schema musst du Feldnamen anpassen – hier: created_at $stmt = $pdo->prepare(" DELETE FROM web_quicktests WHERE created_at < (NOW() - INTERVAL 90 DAY) "); $stmt->execute(); $deleted = $stmt->rowCount(); echo json_encode([ 'ok' => true, 'deleted' => $deleted, 'note' => 'Tests älter als 90 Tage wurden entfernt (Beispiel-Implementierung).', ], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); }