我在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类的实例。
答案 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
)并且不会触发该错误。