我有一张图片,让我们说http://localhost/myapp/uploads/image.jpg
。
我有一个脚本可以将此图像拉出来显示在主页上,如下所示:
<img src="<? echo base_url().'uploads/.$filename ; ?>
最终会发布以下HTML:
<img src="http://localhost/myapp/uploads/image.jpg">
现在,当我在Windows资源管理器中访问该文件夹时,我可以清楚地看到那里的图像。
但是,当尝试使用上面指定的链接显示它时 - 它会抛出404。
一些事情:
base_url()
设置正确。"GET /myapp/uploads/image.jpg HTTP/1.1 " 404 1175
我对这里到底出了什么问题很困惑。
答案 0 :(得分:2)
您的<img>
代码似乎不正确:
<img src="<? echo base_url().'uploads/.$filename ; ?>
不应该是:
<img src="<? echo base_url() . 'uploads/' . $filename ; ?>" />
为了避免再次出现类似问题,我强烈建议您避免使用此类型的模板代码格式。而是这样做:
$img_url = base_url() . 'uploads/' . $filename ;
echo "<img src=" . $img_url . " />";
我个人认为使用与HTML混合的内联PHP代码是一个巨大的调试问题,应该不惜一切代价避免。
编辑此外,当您尝试通过浏览器直接加载时会发生什么?或者就此而言,当您在命令行/终端时,使用时获得的响应是什么:
curl -I http://localhost/myapp/uploads/image.jpg
如果图像检索成功,则返回图像的完整标题并传送200
;如果未加载图像,则传送404
。
最重要的是,当你说:
Now, when I access the folder in windows explorer, I can clearly see the image there.
你的意思是只浏览文件系统?您需要通过浏览器获取完整的URL。也许你的图像有一些大写/小写的问题?或者甚至可能是文件名开头或结尾的杂散空间?但总的来说,这是一个相当简单的调试问题。
答案 1 :(得分:2)
应为'uploads/'
<img src="<? echo base_url().'uploads/'.$filename ; ?>
而不是
<img src="<? echo base_url().'uploads/.$filename ; ?>
答案 2 :(得分:1)
您最后错过了结束引号和括号" />
不'uploads/.$filename
应为'uploads/'.$filename
<img src="<? echo base_url().'uploads/'.$filename ; ?>"/>
答案 3 :(得分:0)
所以 - 灵魂被证明比我想象的更简单。
我打开了我的.htaccess文件(取消了index.php的使用)并更改了:
RewriteEngine On
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L]
要:
RewriteEngine On
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
Options -Indexes
这解决了这个问题。
显然我使用了.htaccess来防止图像被显示....如果有人能够准确地解释这几行代码的作用 - 我将不胜感激。