Forzar descarga de archivo con PHP
A veces cuando introducimos un vinculo en nuestra web que apunte a un archivo, nuestro navegador interpreta el contenido del archivos y lo muestra, con este método forzaremos a que sea descargado.
Es muy común poner en nuestra web enlaces a archivos para que los usuarios de la misma puedan descargarlo.
Dependiendo del tipo de archivo y navegador, cuando pulsamos sobre el enlace, archivos tipo PDF, JPG, PNG, AVI,… son reconocidos por nuestro navegador y en vez de poder descargarlo los muestra.
Este opción a menudo es deseable, pero si nuestra finalidad es la de que nuestro visitante termine descargándoselo quizás sea mas interesante que le forcemos la descarga.
Para ello necesitamos hacer un POST con la URL del fichero sobre una pagina “descarga.php”, que contenga el siguiente código:
&lt;?php if(isset($_POST["urlfiledownload"]) ){ $nombre=pathinfo($_POST["urlfiledownload"], PATHINFO_BASENAME); header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=\"$nombre\""); $fp=fopen($_POST["urlfiledownload"], "r"); fpassthru($fp); } ?&gt;Es muy importante que no exista ningún salto de linea, espacio o similar antes al inicio del archivo, es decir antes de “<?php”
Después en nuestra web introducimos el siguiente formulario:
&lt;form method="POST" action="descargar.php"&gt; &lt;input style="display: none;" name="urlfiledownload" type="text" value="URL_FICHERO" /&gt; &lt;input class="BotonDescarga" type="submit" value="Descargar" /&gt; &lt;/form&gt;No se nos olvide cambiar URL_FICHERO por nuestro fichero en cuestión.