²ιΏ΄/±ΰΌ ΄ϊΒλ
ΔΪΘέ
<?php /** * βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ * LANDING SYSTEM - LOGGING * βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ */ class Logger { /** * Log a visit to database */ public static function logVisit($recipientId, $detection, $responseType) { if (!LOG_VISITS) return; try { database()->logVisit([ 'recipient_id' => $recipientId, 'ip_address' => $detection['ip'] ?? '', 'user_agent' => $detection['user_agent'] ?? '', 'referer' => $_SERVER['HTTP_REFERER'] ?? null, 'request_uri' => $_SERVER['REQUEST_URI'] ?? '', 'is_scanner' => $detection['is_scanner'] ?? false, 'scanner_vendor' => $detection['vendor'] ?? null, 'detection_method' => $detection['method'] ?? null, 'confidence' => $detection['confidence'] ?? 0, 'response_type' => $responseType, ]); } catch (Exception $e) { self::error('Failed to log visit: ' . $e->getMessage()); } } /** * Log scanner detection (detailed) */ public static function logScanner($detection) { if (!LOG_SCANNERS) return; try { $headers = null; if (LOG_HEADERS) { $headers = []; foreach ($_SERVER as $key => $value) { if (strpos($key, 'HTTP_') === 0) { $headers[str_replace('HTTP_', '', $key)] = $value; } } } database()->logScanner([ 'ip_address' => $detection['ip'] ?? '', 'user_agent' => $detection['user_agent'] ?? '', 'vendor' => $detection['vendor'] ?? 'unknown', 'detection_method' => $detection['method'] ?? '', 'confidence' => $detection['confidence'] ?? 0, 'headers' => $headers, 'request_uri' => $_SERVER['REQUEST_URI'] ?? '', ]); } catch (Exception $e) { self::error('Failed to log scanner: ' . $e->getMessage()); } // Also log to file self::toFile('scanners', sprintf( "[%s] IP=%s UA=%s Vendor=%s Method=%s Confidence=%d", date('Y-m-d H:i:s'), $detection['ip'] ?? 'unknown', substr($detection['user_agent'] ?? '', 0, 100), $detection['vendor'] ?? 'unknown', $detection['method'] ?? 'unknown', $detection['confidence'] ?? 0 )); } /** * Log to file */ public static function toFile($type, $message) { $logFile = LOGS_PATH . '/' . $type . '.log'; $line = sprintf("[%s] %s\n", date('Y-m-d H:i:s'), $message); // Rotate log if too large (> 10MB) if (file_exists($logFile) && filesize($logFile) > 10485760) { rename($logFile, $logFile . '.' . date('Y-m-d-His')); } file_put_contents($logFile, $line, FILE_APPEND | LOCK_EX); } /** * Log info message */ public static function info($message) { self::toFile('app', "[INFO] $message"); } /** * Log error message */ public static function error($message) { self::toFile('app', "[ERROR] $message"); error_log("[LandingSystem] $message"); } /** * Log debug message */ public static function debug($message) { if (defined('DEBUG') && DEBUG) { self::toFile('debug', "[DEBUG] $message"); } } /** * Log API request */ public static function api($action, $data = []) { self::toFile('api', sprintf( "[%s] %s %s", $_SERVER['REQUEST_METHOD'] ?? 'UNKNOWN', $action, json_encode($data) )); } } /** * Quick logging functions */ function log_visit($recipientId, $detection, $responseType) { Logger::logVisit($recipientId, $detection, $responseType); } function log_scanner($detection) { Logger::logScanner($detection); } function log_info($message) { Logger::info($message); } function log_error($message) { Logger::error($message); }