PHP - Descarga de imagenes con PHP

 
Vista:

Descarga de imagenes con PHP

Publicado por PasabaPorAqui (43 intervenciones) el 10/07/2009 08:51:46
Buenas.

Quiero descargar unas imagenes que tengo subidas, al servidor, el caso es que el navegador, no lo interpreta como una descarga y lo que hace es abrir la imagen.

Para evitar esto, utilizo el siguiente código.

<?php
//download.php
$file_name = $_GET[file];
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/octet-stream");
header("Content-Length: ".filesize($file_name));
header("Content-Disposition: attachment; filename=$file_name");
header("Content-Transfer-Encoding: binary");
readfile($file_name);
?>

Para descargar sería http://pagina.com/download.php?file=imagen1.jpg

El caso es que me descarga la imagen, con el mismo peso que tiene en el servidor, pero no me la abre, si la abro con photoshop me dice que el certificado de firma digital está incompleto, con otros programas me dice que no hay o que no es imagen.

¿Alguien puede decirme que es lo que está mal en el código?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Descarga de imagenes con PHP

Publicado por PasabaPorAqui (43 intervenciones) el 13/07/2009 08:10:54
Buenas.

Lo que pasa es que por algún motivo añade carácteres al principio del archivo descargado, concretamente 4 saltos de línea, que son lo que hace que falle al abrir la imagen.

¿Alguien sabe como evitar esto?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Resuelto

Publicado por PasabaPorAqui (43 intervenciones) el 13/07/2009 12:52:12
Lo solucioné poniendo esto al inicio del script ob_start(); y esto justo antes de abrir la imagen para descarga ob_end_clean(); o sea que quedaría así

<?php
ob_start();
//download.php
$file_name = $_GET[file];
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/octet-stream");
header("Content-Length: ".filesize($file_name));
header("Content-Disposition: attachment; filename=$file_name");
header("Content-Transfer-Encoding: binary");
ob_end_clean();
readfile($file_name);
?>

Lo saqué de aquí http://php.chinaunix.net/manual/zh/function.header.php#81045

Espero que le sirva a alguien más.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar