2010-05-14 11 views
5

Estoy tratando de mostrar una imagen en línea en una página. Está siendo servido por un controlador codeigniter.Disposición de contenido: el encabezado en línea no mostrará las imágenes en línea?

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

} 

Cuando cargo una imagen en Chrome of FF, aparece la ventana de descarga. Sé que cuando el navegador no puede mostrar el contenido en línea forzará la descarga de todos modos, pero estas son imágenes PNG y GIF que de lo contrario se muestran en el navegador. En IE no fuerza una descarga pero muestra la imagen en ASCII.

Si comento todo el caso de la imagen, FF y Chrome muestran el ASCII pero no la imagen.

Pensé que configurar el tipo de contenido permitiría a FF y Chrome mostrar la imagen real, y también permitir que la ubicación se use como un src.

El javascript y el CSS se muestran bien, por supuesto.

¿Alguien tiene alguna idea de cómo puedo hacer que las imágenes se muestren correctamente?

Respuesta

5

Intente eliminar el encabezado Content-disposition. Por defecto, deben mostrarse en línea de todos modos.

De todos modos, deberías estar haciendo algo mal. Acabo de probar en Opera e IE y efectivamente muestran la imagen en línea con el encabezado de disposición de contenido. Utilicé:

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

readfile('Untitled.png'); 

Utilice las herramientas de desarrollo de su navegador para verificar el encabezado de respuesta.

EDITAR

Probablemente este error está causando el problema:

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

da ".ext" no "ext". Sustituto de strrpos() + 1.

+0

Oh, eso lo solucionó. ¡Gracias! :) – hamstar

Cuestiones relacionadas