未找到图像时创建的Codeigniter控制器

时间:2012-03-06 10:51:12

标签: php codeigniter httprequest

我在CodeIgniter中遇到问题,那就是当在服务器上找不到图像时,会创建一个控制器实例(除了调用该视图的实例)。

我知道这一切听起来很混乱,所以这是观察我所说的内容的代码。我对这个干净的2.1.0 CI版本进行了更改:

添加一个控制器来覆盖404错误页面,我添加了这个:

// add application/controllers/Errors.php 
Class Errors extends CI_Controller {

    public function error_404() {
        echo 'error';
    }
}
// change routes.php
$route['404_override'] = 'Errors/error_404';

使用不是默认图像的控制器,我使用了这个:

// add application/controllers/Foo.php 
Class Foo extends CI_Controller {

    public function index() {
        echo '<img src="doesntexist.png" />';
    }

}

我无法想出另一种调试方式,所以我创建了一个日志来编写CodeIgniter.php上的事件:

// add on CodeIgniter.php line 356
$path = 'log.txt'; //Place log where you can find it
$file = fopen($path, 'a');
fwrite($file, "Calling method {$class}/{$method} with request {$_SERVER['REQUEST_URI']}\r\n");
fclose($file);

这样,生成访问索引函数的日志如下:

Calling method Foo/index with request /test/index.php/Foo
Calling method Errors/error_404 with request /test/index.php/doesntexist.png

我遇到的问题是,创建了一个Error类的实例。

1 个答案:

答案 0 :(得分:0)

that is that when an image is not found on the server, the instance of a controller is created 

不是真的。我认为正在发生的是,因为你正在使用图像的相对路径(并且直接在控制器中调用它,这是错误的,因为你在标题之前输出了一些东西),你的浏览器会将图像直接附加到CI url,从而向服务器发出此请求:

index.php/doesntexist.png

CI正确地将其解释为对控制器的请求,该控制器不存在,因此它会发出错误类。

你可以用你的实际代码(虽然我把图像放在视图中):

echo '<img src="/doesntexist.png" />'

使用absoluth路径,或使用url helper中的base_url()方法:

echo '<img src="'.base_url().'doesntexist.png" />

这应该告诉服务器获取正确的请求(/test/doesntexist.png)并且不会触发该错误。