martes, 25 de febrero de 2014

Forzar descarga de archivos con header PHP


Bienvenid@s, hoy vamos a ver un ejemplo de como forzar la descarga de archivos a través de cabeceras HTTP, precisamente la descarga de imágenes con extensión jpg|png|gif , en el switch como default se incluye application/force-download,  que va a permitir descargar cualquier archivo, no es aconsejable si lo que quieres permitir es la descarga de un tipo o tipos de archivos en concreto, ya que con force-download podrías descargar por ejemplo un .exe u otro cualquier archivo que se te antoje.

En definitivo aquí os dejo el código de ejemplo para que lo amolden a sus necesidades ...


/*Forzar descarga de archivos*/

/*Ruta de la imagen*/
$ruta = 'php-o.png';
/*Información de la imagen para obtener la extensión*/
$info = pathinfo($ruta);
/* Obtener la extensión */
$ext = strtolower($info["extension"]);

switch($ext)
{
case 'png':
$tipo = 'image/png';
break;

case 'jpg':
$tipo = 'image/jpg';
break;

case 'gif':
$tipo = 'image/gif';
break;

default:
/* Para descargar cualquier tipo de archivo
si quieres que se descarguen sólo imágenes
quita esta parte de aquí */
$tipo = 'application/force-download';
break;
}

$size = filesize($ruta);
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); /*Para algunos navegadores*/
header('Cache-Control: private', false); /*Para algunos navegadores*/
header('content-type: '.$tipo.'');
header('content-disposition: attachment; filename="'.basename($ruta).'"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.$size);
readfile($ruta);



No hay comentarios: