服务器不显示图像

时间:2013-12-28 18:53:08

标签: php image apache

我有一张图片,让我们说http://localhost/myapp/uploads/image.jpg

我有一个脚本可以将此图像拉出来显示在主页上,如下所示:

<img src="<? echo base_url().'uploads/.$filename ; ?>

最终会发布以下HTML:

<img src="http://localhost/myapp/uploads/image.jpg">

现在,当我在Windows资源管理器中访问该文件夹时,我可以清楚地看到那里的图像。

但是,当尝试使用上面指定的链接显示它时 - 它会抛出404。

一些事情:

  1. 我的base_url()设置正确。
  2. apache错误日志不显示操作。
  3. 但是,Apache Access日志显示以下内容:"GET /myapp/uploads/image.jpg HTTP/1.1 " 404 1175
  4. 我对这里到底出了什么问题很困惑。

4 个答案:

答案 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来防止图像被显示....如果有人能够准确地解释这几行代码的作用 - 我将不胜感激。