Если вы чувствуете необходимость сделать это, просто расширьте класс 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']
даст вам URL, на который была запрошена страница из Таким образом, вы можете видеть, откуда возник запрос, будь то на вашем сайте или где-либо еще. $_SERVER['REMOTE_ADDR']
должен дать вам IP-адрес, на который был сделан запрос
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);
}