Saltar al contenido

Forzar Descarga de Archivos con PHP

  • septiembre 29, 2018

Forzar descarga de archivos con php

muy buenas mi gente de cómo crear mi web online, en el día de hoy vamos a ver como forzar la descarga de archivos de un directorio, esto nos puede servir para ese tipo de web que almacenan archivos ya sea mp3, software o documentos. En el caso de los archivos de audios o mp3 casi siempre cuando se accede a su ruta desde un navegador web lo que hace el navegador es llamar al reproductor interno del navegador para reproducir ese archivos.

Lo que vamos hacer en este caso es forzar su descarga para que este reproductor no sea llamado ya que la acción que queremos usar es su descarga sin la necesidad de reproducirlo.

A continuación colocare el código completo en un directorio de música llamado audio y luego paso a detallarlo paso a paso.

<?php

/
/perfecto para chrome
$file = $_GET['file'];
if( !file_exists($file) )
{
header("HTTP/1.0 404 Not Found", true, 404);
echo '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL was not found on this server.</p>
<p>Additionally, a 404 Not Found
error was encountered while trying to use an ErrorDocument to handle the request.</p>
</body></html>';
exit;
}

header ("Content-type: octet/stream");

header('Accept-Ranges: bytes'); // For download resume

header('Connection: Keep-Alive');

header("Content-type: audio/mpeg");

header('Content-Disposition: attachment; filename="'.$_GET['file'].'"');

header("Content-Length: ".filesize($file));

readfile($file);

exit;

?>

Si observas muy bien lo que hemos hecho en el codigo anterior es recuperar el nombre del archivo que el usuario nos pasa por la url para eso llamamos el metodo GET con php para recuperar lo que el usuarios no envia.

$file = $_GET['file'];
if( !file_exists($file) )
{
header("HTTP/1.0 404 Not Found", true, 404);
echo '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL was not found on this server.</p>
<p>Additionally, a 404 Not Found
error was encountered while trying to use an ErrorDocument to handle the request.</p>
</body></html>';
exit;
}

Este código dispone de dos opciones para que nuestro archivo pueda ser descargado sin problema. La primera si te fijas es donde llamamos al metodo GET y recuperamos el dato que el usuario nos envía por medio de la url en este caso sera el nombre del Archivo.

Si la condición es falsa entonces enviamos al usuario a una pagina de error 404 porque dicho archivo no se encuentra en nuestro servidor.

En caso de que la condición sea verdadera entonces procedemos a procesar el archivo para que el usuario lo pueda descargar sin ningún problema para esto llamamos a la función READFILE() ya que esta es la función de php que nos permite forzar extraer un archivo de un directorio sin que este sea abierto.

De esta forma estamos asegurando de que el archivo se descargara en nuestra computadora y no se reproducirá en caso de que sea un archivo de audio o mp3.