xref: /plugin/botmon/pview.php (revision b148c85e515b2d6530216e5bca8afc3c8a5fc09a)
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// what is the session identifier?
11$sessionId = preg_replace('/[\x00-\x1F{};\"\']/', "\u{FFFD}",  $json['id']) /* clean json parameter */
12	?? session_id()
13	?? $_SERVER['REMOTE_ADDR'];
14
15// clean the page ID
16$pageId = preg_replace('/[\x00-\x1F{};\"\']/', "\u{FFFD}", $json['pg'] ?? '');
17
18// clean the user-name
19$userName = preg_replace('/[\x00-\x1F\"]/', "\u{FFFD}", $json['u'] ?? '');
20
21// check load time
22$loadTime = $json['lt'] ?? '';
23if ($loadTime !== '' ) $loadTime = intval($loadTime);
24
25// clean the user agent string
26$agent = preg_replace('/[\x00-\x1F]/', "\u{FFFD}", $_SERVER['HTTP_USER_AGENT'] ?? '');
27
28// clean the referer
29$referer = preg_replace('/[\x00-\x1F]/', "\u{FFFD}", $json['r'] ?? '');
30
31
32/* build the resulting log line (ensure fixed column positions!) */
33$logArr = Array(
34	$_SERVER['REMOTE_ADDR'] ?? '', /* remote IP */
35	$pageId, /* DW Page ID */
36	$sessionId, /* Session ID */
37	$userName, /* DW User name (if logged in) */
38	$loadTime, /* load time */
39	$referer, /* Referrer URL */
40	$agent /* User agent */
41	// $json['lg'] ?? '', /* browser language */
42	// $json['scr'] ?? '', /* Screen dimensions */
43	// $json['tz'] ?? '', /* timzone offset */
44	// $json['l'] ?? '', /* Accepted languages list */
45	// $json['url'] ?? '', /* Full request URL */
46	// $json['t'] ?? '' /* Page title */
47);
48
49/* create the log line */
50$filename = 'logs/' . gmdate('Y-m-d') . '.log.txt'; /* use server datetime */
51$logline = gmdate('Y-m-d H:i:s');
52foreach ($logArr as $val) {
53	$logline .= "\t" . $val;
54};
55
56/* write the log line to the file */
57$logfile = fopen($filename, 'a');
58if (!$logfile) {
59	http_response_code(507);
60	die("Error: Unable to open log file. Please check file permissions.");
61}
62
63if (fwrite($logfile, $logline . "\n") === false) {
64	http_response_code(500);
65	fclose($logfile);
66	die("Error: Could not write to log file.");
67}
68fclose($logfile);
69
70/* send a 202 response */
71http_response_code(202);
72echo "OK";