例如,在我的日志中,我有许多重复的行,例如:
ERROR - 2011-07-06 09:19:01 --> 404 Page Not Found --> favicon.ico
有没有办法让我找出谁在调用这些错误的网址? favicon只是一个例子,有一些URL例如显示出攻击的意图,而其他URL则是一遍又一遍地重复相同的错误。基本上我很想知道哪些IP可能会被阻止,以及如果他们有错误的链接会联系哪些网站(或者我应该使用.htaccess将它们重定向到我的服务器上)。
答案 0 :(得分:5)
如果您认为有必要这样做,只需扩展Exceptions类并覆盖show_404()
函数:
// v2.x: core/MY_Exceptions.php
// v1.x: libraries/MY_Exceptions.php
class MY_Exceptions extends CI_Exceptions {
/**
* 404 Page Not Found Handler
*
* @access private
* @param string
* @return string
*/
function show_404($page = '', $log_error = TRUE)
{
$heading = "404 Page Not Found";
$message = "The page you requested was not found.";
// By default we log this, but allow a dev to skip it
if ($log_error)
{
// Custom code here, maybe logging some $_SERVER variables
// $_SERVER['HTTP_REFERER'] or $_SERVER['REMOTE_ADDR'] perhaps
// Just add whatever you want to the log message
log_message('error', '404 Page Not Found --> '.$page);
}
echo $this->show_error($heading, $message, 'error_404', 404);
exit;
}
}
如果你继续得到像favicon.ico
这样的东西,这很有可能是你的错,所以你可能想看一下。
只是为了澄清:
$_SERVER['HTTP_REFERER']
将为您提供从请求页面的网址,以便您查看请求的来源,无论是在您的网站上还是其他地方。$_SERVER['REMOTE_ADDR']
应该为您提供http://php.net/manual/en/reserved.variables.server.php
简要示例:
if ($log_error)
{
$msg = '';
if (isset($_SERVER['HTTP_REFERER']))
{
$msg .= 'Referer was '.$_SERVER['HTTP_REFERER'];
}
else
{
$msg .= 'Referer was not set or empty';
}
if (isset($_SERVER['REMOTE_ADDR']))
{
$msg .= 'IP address was '.$_SERVER['REMOTE_ADDR'];
}
else
{
$msg .= 'Unable to track IP';
}
log_message('error', '404 Page Not Found --> '.$page.' - '.$msg);
}
答案 1 :(得分:1)
我相信如果你想要这个,你必须通过创建custom 404 page并手动登录到日志文件来自己记录。您可以通过$_SERVER['REMOTE_ADDR']
访问PHP中的IP地址。