2010-05-14 197 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