17bd08c30SSascha Leib<?php /* BOT MONITOR PLUGIN PAGE VIEW SCRIPT */ 2cf9f7fe8SSascha Leib 3cf9f7fe8SSascha Leib/* parse the JSON payload */ 4cf9f7fe8SSascha Leib$json = json_decode($_POST['pageview'], true); 5cf9f7fe8SSascha Leibif (!$json) { 6cf9f7fe8SSascha Leib http_response_code(400); 7cf9f7fe8SSascha Leib die("Error: Invalid JSON data sent to server."); 8cf9f7fe8SSascha Leib} 9cf9f7fe8SSascha Leib 10abfc901fSSascha Leib// what is the session identifier? 11*13c9d29dSSascha Leib$sessionId = $json['u'] ?? ''; 12*13c9d29dSSascha Leib$sessionType = 'usr'; 13*13c9d29dSSascha Leibif ($sessionId == '') { 14*13c9d29dSSascha Leib $sessionId = $_COOKIE['DokuWiki'] ?? ''; 15abfc901fSSascha Leib $sessionType = 'dw'; 16*13c9d29dSSascha Leib} 17*13c9d29dSSascha Leibif ($sessionId == '') { 18abfc901fSSascha Leib $sessionId = $_SERVER['REMOTE_ADDR'] ?? ''; 19f162e4a9SSascha Leib if ($sessionId == '127.0.0.1' || $sessionId == '::1') { 20abfc901fSSascha Leib $sessionId = 'localhost'; 21abfc901fSSascha Leib } 22abfc901fSSascha Leib $sessionType = 'ip'; 23abfc901fSSascha Leib} 24abfc901fSSascha Leib 25cf9f7fe8SSascha Leib/* build the resulting log line (ensure fixed column positions!) */ 26cf9f7fe8SSascha Leib$logArr = Array( 2787d76396SSascha Leib $_SERVER['REMOTE_ADDR'] ?? '', /* remote IP */ 2887d76396SSascha Leib $json['pg'] ?? '', /* DW page ID */ 29abfc901fSSascha Leib $sessionId, /* Session ID */ 302f2bc93aSSascha Leib $json['u'] ?? '', /* DW User id (if logged in) */ 31ade4db36SSascha Leib $json['lt'] ?? '', /* load time */ 329f1ee8c1SSascha Leib $json['r'] ?? '', /* Referrer URL */ 339f1ee8c1SSascha Leib $_SERVER['HTTP_USER_AGENT'] ?? '' /* User agent */ 3487d76396SSascha Leib // $json['lg'] ?? '', /* browser language */ 3587d76396SSascha Leib // $json['scr'] ?? '', /* Screen dimensions */ 362f2bc93aSSascha Leib // $json['tz'] ?? '', /* timzone offset */ 3787d76396SSascha Leib // $json['l'] ?? '', /* Accepted languages list */ 3887d76396SSascha Leib // $json['url'] ?? '', /* Full request URL */ 39cf9f7fe8SSascha Leib // $json['t'] ?? '' /* Page title */ 40cf9f7fe8SSascha Leib); 41cf9f7fe8SSascha Leib 42cf9f7fe8SSascha Leib/* create the log line */ 434cddc661SSascha Leib$filename = 'logs/' . gmdate('Y-m-d') . '.log.txt'; /* use server datetime */ 44cf9f7fe8SSascha Leib$logline = gmdate('Y-m-d H:i:s'); 45cf9f7fe8SSascha Leibforeach ($logArr as $val) { 46cf9f7fe8SSascha Leib $logline .= "\t" . $val; 47cf9f7fe8SSascha Leib}; 48cf9f7fe8SSascha Leib 49cf9f7fe8SSascha Leib/* write the log line to the file */ 50cf9f7fe8SSascha Leib$logfile = fopen($filename, 'a'); 51cf9f7fe8SSascha Leibif (!$logfile) { 52cf9f7fe8SSascha Leib http_response_code(500); 53cf9f7fe8SSascha Leib die("Error: Unable to open log file. Please check file permissions."); 54cf9f7fe8SSascha Leib} 55cf9f7fe8SSascha Leib 56cf9f7fe8SSascha Leibif (fwrite($logfile, $logline . "\n") === false) { 57cf9f7fe8SSascha Leib http_response_code(500); 58cf9f7fe8SSascha Leib fclose($logfile); 59cf9f7fe8SSascha Leib die("Error: Could not write to log file."); 60cf9f7fe8SSascha Leib} 61cf9f7fe8SSascha Leibfclose($logfile); 62cf9f7fe8SSascha Leib 63cf9f7fe8SSascha Leib/* send a 202 response */ 64cf9f7fe8SSascha Leibhttp_response_code(202); 65cf9f7fe8SSascha Leibecho "OK";