From 77f9c55e858fa9739880c5aa0ffff0dd11b6a4c7 Mon Sep 17 00:00:00 2001 From: Kenji ITO Date: Mon, 23 Jan 2017 21:02:02 +0900 Subject: [PATCH] Add user agent to 404.log entry (code provided by hiroron) --- public_html/lib-common.php | 49 +++++++++++++++++++++++++------------- 1 file changed, 33 insertions(+), 16 deletions(-) diff --git a/public_html/lib-common.php b/public_html/lib-common.php index 806458402..afe10d4a2 100644 --- a/public_html/lib-common.php +++ b/public_html/lib-common.php @@ -7658,36 +7658,53 @@ function COM_handle404($alternate_url = '') header('HTTP/1.1 404 Not Found'); header('Status: 404 Not Found'); - // Add log stuff - $url = COM_getCurrentURL(); - if (isset($_USER['uid'])) { - $byUser = $_USER['uid'] . '@' . $_SERVER['REMOTE_ADDR']; + if (isset($_SERVER['SCRIPT_URI'])) { + $url = $_SERVER['SCRIPT_URI']; } else { + if (empty($_SERVER['HTTPS']) || ($_SERVER['HTTPS'] === 'off')) { + $url = 'http'; + } else { + $url = 'https'; + } + + $url .= '://' . @$_SERVER['HTTP_HOST'] . strip_tags($_SERVER['SCRIPT_URI']); + } + + // Add log stuff + if (empty($_USER['uid'])) { $byUser = 'anon@' . $_SERVER['REMOTE_ADDR']; + } else { + $byUser = $_USER['uid'] . '@' . $_SERVER['REMOTE_ADDR']; } - $refUrl = $_SERVER['HTTP_REFERER']; - $timestamp = @strftime('%c'); - $logEntry = "404 Error generated by $byUser for url: $url"; - if (!empty($refUrl)) { - $logEntry .= " - Referring url: $refUrl"; + + $logEntry = "404 Error generated by {$byUser} for URL: {$url}"; + + // Add referer + if (!empty($_SERVER['HTTP_REFERER'])) { + $logEntry .= " - Referring URL: {$_SERVER['HTTP_REFERER']}"; } - $logEntry = str_replace(array(''), array('(@', '@)'), $logEntry); - $logfile = $_CONF['path_log'] . '404.log'; - if ($file = fopen($logfile, 'a')) { - fputs($file, "$timestamp - $logEntry \n"); + // Add user agent + if (isset($_SERVER['HTTP_USER_AGENT'])) { + $logEntry .= ' - User agent: ' . $_SERVER['HTTP_USER_AGENT']; } - $display = COM_startBlock($LANG_404[1]); - $display .= sprintf($LANG_404[2], $url); + // Write into log file + $logEntry = str_replace(array(''), array('(@', '@)'), $logEntry); + $logEntry = @strftime('%c') . ' - ' . $logEntry . PHP_EOL; + @file_put_contents($_CONF['path_log'] . '404.log', $logEntry, FILE_APPEND | LOCK_EX); + + $display = COM_startBlock($LANG_404[1]) + . sprintf($LANG_404[2], $url); + if ($alternate_url != '') { $display .= sprintf($LANG_404[4], $alternate_url); } else { $display .= $LANG_404[3]; } + $display .= COM_endBlock(); $display = COM_createHTMLDocument($display, array('pagetitle' => $LANG_404[1])); - COM_output($display); exit; // Do not want to go any further }