CodeIgniter中同控制器display()方法无法显示图片,index()方法正常
嘿,这个问题我太熟了!你遇到的情况十有八九是图片相对路径的坑,跟CodeIgniter的URL结构直接相关。
为什么index()正常,display()却不行?
咱们先捋清楚URL的差异:
- 当访问
index()方法时,URL是类似http://你的域名/控制器名,这时候视图里如果用相对路径写图片(比如<img src="images/portfolio.jpg">),浏览器会自动把它解析成http://你的域名/images/portfolio.jpg,刚好命中正确的图片位置。 - 但调用
display()方法时,URL变成了http://你的域名/控制器名/display,这时候浏览器会把相对路径的图片解析成http://你的域名/控制器名/images/portfolio.jpg——这个路径下根本没有图片,自然就显示不出来了!
几个靠谱的解决办法
按推荐程度给你列出来:
1. 用CodeIgniter的URL辅助函数生成绝对路径(首推)
这是最稳妥且易维护的方式。首先,你可以在控制器里加载URL辅助函数:
// 在display()或者index()方法里加载,也可以在application/config/autoload.php里全局自动加载 $this->load->helper('url');
然后在视图home/portfolio2里,把图片路径改成用base_url()生成:
<img src="<?php echo base_url('images/portfolio.jpg'); ?>" alt="Portfolio Image">
这样不管你访问哪个方法,图片路径都会被解析成完整的绝对路径,绝对不会出错。
2. 在HTML头部设置base标签
在视图的<head>标签里添加一个<base>标签,指定页面的基础URL:
<base href="<?php echo base_url(); ?>">
之后视图里所有的相对路径资源(图片、CSS、JS)都会基于这个base URL来解析,不用一个个改路径,也能解决问题。
3. 手动写完整绝对路径(不推荐)
直接在视图里写死完整的图片URL:
<img src="http://你的域名/images/portfolio.jpg" alt="Portfolio Image">
这种方式虽然简单,但一旦域名更换或者部署到不同环境,你就得手动修改所有路径,维护成本很高,所以尽量不用。
额外要检查的点
- 确认你的图片文件夹是放在项目根目录(和
application、system文件夹同级)的images里,而不是application目录下,不然base_url()也找不到。 - 检查项目根目录的
.htaccess文件,确保重写规则没有拦截静态资源的访问(比如要排除images、css这类静态文件夹)。
内容的提问来源于stack exchange,提问作者raviraj123456
相关产品推荐
相关产品推荐

