2010-05-14 149 views
5

我试图在页面上显示一个图像内联。它由代码控制器提供服务。内容处置:内联标题不会显示图像内联?

class Asset extends MY_Controller { 

    function index($folder, $file) { 

     $asset = "assets/$folder/$file"; 

     if (!file_exists($asset)) { 
      show_404(); 
      return; 
     } 

     switch ($folder) { 
     case 'css': 
      header('Content-type: text/css'); 
      break; 
     case 'js': 
      header('Content-type: text/javascript'); 
      break; 
     case 'images': 
      $ext = substr($file, strrpos($file, '.')); 
      switch ($ext) { 
      case 'jpg': 
       $ext = 'jpeg'; 
       break; 
      case 'svg': 
       $ext = 'svg+xml'; 
       break; 
      } 

      header('Content-Disposition: inline'); 
      header('Content-type: image/'.$ext); 
     } 

     readfile($asset); 
    } 

} 

当我在FF的Chrome中加载图像时,弹出下载窗口。我知道当浏览器无法显示内联内容时,它会强制下载,但这些都是PNG和GIF图像,否则在浏览器中显示正常。在IE中,它不强制下载,但是它以ASCII格式显示图像。

如果我注释掉整个图像大小写,FF和Chrome都显示ASCII而不是图像。

我认为设置内容类型将允许FF和Chrome显示实际图像,并且还允许将该位置用作src。

JavaScript和CSS显示罚款当然。

任何人有任何想法,我可以使图像正确显示?

回答

5

尝试删除Content-disposition标头。默认情况下,它们应该以内联方式显示。

无论如何,你应该做错了什么。我刚刚在Opera和IE中进行了测试,他们确实在内容处理头中显示图像。我用过:

<?php 
header('Content-Disposition: inline'); 
header('Content-type: image/png'); 

readfile('Untitled.png'); 

使用浏览器的开发工具来检查响应头。

编辑

也许这个错误导致了问题:

<?php 
echo substr("file.ext", strrpos("file.ext", '.')); 

给 “.EXT” 不 “转”。替代strrpos()+ 1.

+0

哦,修正了它。谢谢! :) – hamstar 2010-05-14 09:51:09