Codeigniter的记录行为| show_404()

时间:2013-02-06 02:35:42

标签: php codeigniter

我使用控制器为页面做一些自定义uri路由,它目前工作得很好。

这是控制器的精简版本,它使用PHPTAL作为模板引擎。

public function index()
{
    $this->tal->display('index');
}

public function view($url)
{       
    $this->loadView($url);
}   

private function loadView($url) 
{

   if (file_exists(ROOTPATH . 'webroot/' . $url . '/index.html')) 
   {
       $this->tal->display($url . '/index');
   } 
   else 
   {  
       show_404();
   }
}

问题

我最近注意到,每次访问页面控制器时,我的日志中都出现以下错误:

ERROR - 2013-02-06 10:58:23 --> 404 Page Not Found -->

我发现这很奇怪,因为页面按预期显示,并且肯定没有404标题,并且网络面板没有404状态。

我最终将其缩小到show_404()方法中调用的loadView()辅助方法。删除该行可以阻止错误完全出现在日志文件中。

只有在找不到视图文件时才应执行此§show_404()§,在这种情况下,它应该显示404错误页面。但是,无论是否调用loadView()方法,该方法的日志记录部分似乎都是在每次调用页面控制器时执行的。

实施例

我在浏览器中访问index()视图,一切似乎都正常,加载了正确的视图文件,没有错误。但是,loadView()方法会记录404错误消息。 loadView()方法甚至没有从index()方法调用,但是日志文件中输出的存在似乎表明它正在被执行。

1 个答案:

答案 0 :(得分:6)

show_404的默认行为是insert a log entry when its called。还有第二个可选参数可以禁用它,所以如果您只想显示404页面而不记录它,请调用它:

show_404('', false);

第一个参数是将在日志中的-->之后附加的字符串,因此您也可以将其保留为空。

至于为什么可以调用_loadView函数:

如果您使用的网址中没有index.php(空$config['index_page']),那么网络服务器服务器无法找到的每个静态资产(图像,js,css等)(取决于具体的重写规则)将传递给php脚本,并可能在那里生成404错误。