1<?php /* BOT MONITOR PLUGIN PAGE VIEW SCRIPT */ 2 3/* parse the JSON payload */ 4$json = json_decode($_POST['pageview'], true); 5if (!$json) { 6 http_response_code(400); 7 die("Invalid JSON Data."); 8} 9 10// select the session identifier? 11$sessionId = $_COOKIE['DokuWiki'] ?? ''; 12$sessionType = 'dw'; 13if ($sessionId == '') { 14 $sessionId = $_SERVER['REMOTE_ADDR'] ?? ''; 15 if ($sessionId == '127.0.0.1' || $sessionId == '::1') { 16 $sessionId = 'localhost'; 17 } 18 $sessionType = 'ip'; 19} 20 21// check if valid session id string: 22if (strlen($sessionId) < 46 && !preg_match('/^[\w\d\.:]+$/', $sessionId)) { 23 $sessionId = 'invalid-session-id'; 24} 25 26// clean the page ID 27$pageId = preg_replace('/[\x00-\x1F{};]/', "\u{FFFD}", $json['pg'] ?? ''); 28 29// clean the user-name 30$userName = preg_replace('/[\x00-\x1F]/', "\u{FFFD}", $json['u'] ?? ''); 31 32// check load time 33$loadTime = $json['lt'] ?? ''; 34if ($loadTime !== '' ) $loadTime = intval($loadTime); 35 36// clean the user agent string 37$agent = preg_replace('/[\x00-\x1F]/', "\u{FFFD}", $_SERVER['HTTP_USER_AGENT'] ?? ''); 38 39// clean the referer 40$referer = preg_replace('/[\x00-\x1F]/', "\u{FFFD}", $json['r'] ?? ''); 41 42 43/* build the resulting log line (ensure fixed column positions!) */ 44$logArr = Array( 45 $_SERVER['REMOTE_ADDR'] ?? '', /* remote IP */ 46 $pageId, /* DW Page ID */ 47 $sessionId, /* Session ID */ 48 $userName, /* DW User name (if logged in) */ 49 $loadTime, /* load time */ 50 $referer, /* Referrer URL */ 51 $agent /* User agent */ 52 // $json['lg'] ?? '', /* browser language */ 53 // $json['scr'] ?? '', /* Screen dimensions */ 54 // $json['tz'] ?? '', /* timzone offset */ 55 // $json['l'] ?? '', /* Accepted languages list */ 56 // $json['url'] ?? '', /* Full request URL */ 57 // $json['t'] ?? '' /* Page title */ 58); 59 60/* create the log line */ 61$filename = 'logs/' . gmdate('Y-m-d') . '.log.txt'; /* use server datetime */ 62$logline = gmdate('Y-m-d H:i:s'); 63foreach ($logArr as $val) { 64 $logline .= "\t" . $val; 65}; 66 67/* write the log line to the file */ 68$logfile = fopen($filename, 'a'); 69if (!$logfile) { 70 http_response_code(507); 71 die("Error: Unable to open log file. Please check file permissions."); 72} 73 74if (fwrite($logfile, $logline . "\n") === false) { 75 http_response_code(500); 76 fclose($logfile); 77 die("Error: Could not write to log file."); 78} 79fclose($logfile); 80 81/* send a 202 response */ 82http_response_code(202); 83echo "OK";