2010-05-14 1 views
5

J'essaie d'afficher une image en ligne sur une page. Il est servi par un contrôleur codeigniter.Content-disposition: en-tête inline n'affichera pas les images en ligne?

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); 
    } 

} 

Lorsque je charge une image dans Chrome de FF, la fenêtre de téléchargement apparaît. Je sais que lorsque le navigateur ne peut pas afficher le contenu en ligne, il va forcer un téléchargement de toute façon, mais ce sont des images PNG et GIF qui s'affichent dans le navigateur bien autrement. Dans IE il ne force pas un téléchargement mais il affiche l'image en ASCII.

Si je commente l'ensemble du cas de l'image, FF et Chrome affichent tous deux l'ASCII mais pas l'image.

Je pensais que la définition du type de contenu permettrait à FF et à Chrome d'afficher l'image réelle, et permettrait également à l'emplacement d'être utilisé comme src.

Le javascript et css montre bien sûr.

Quelqu'un a-t-il eu des idées sur la manière de montrer les images correctement?

Répondre

5

Essayez de supprimer l'en-tête Content-disposition. Par défaut, ils devraient être affichés en ligne de toute façon.

De toute façon, vous devriez faire quelque chose de mal. Je viens de tester dans Opera et IE et ils affichent en effet l'image en ligne avec l'en-tête content-disposition. J'ai utilisé:

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

readfile('Untitled.png'); 

Utilisez les outils de dev de votre navigateur pour vérifier l'en-tête de réponse.

EDIT

Probablement ce bug est l'origine du problème:

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

donne ".ext" non "poste". Substituer à strrpos() + 1.

+0

Oh qui l'a fixé. Merci! :) – hamstar

Questions connexes