Lo hacemos de esa manera: En primer lugar añadir este script.
<script type="text/javascript">
function populateIframe(id,path)
{
var ifrm = document.getElementById(id);
ifrm.src = "download.php?path="+path;
}
</script>
lugar este donde desea que el botón de descarga (aquí usamos sólo un enlace):
<iframe id="frame1" style="display:none"></iframe>
<a href="javascript:populateIframe('frame1','<?php echo $path; ?>')">download</a>
El archivo 'download.php' (hay que poner en su servidor) contiene simplemente:
<?php
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=".$_GET['path']);
readfile($_GET['path']);
?>
Así que cuando hace clic en el enlace, el iframe oculto a continuación, obtiene/abre la SourceFile 'download.php'. Con la ruta como parámetro get. ¡Creemos que esta es la mejor solución!
Cabe señalar que la parte PHP de esta solución es una demostración simple y potencialmente muy, muy inseguro. Le permite al usuario descargar cualquier archivo, no solo un conjunto predefinido.Eso significa que podrían descargar partes del código fuente del sitio en sí, posiblemente conteniendo credenciales de API etc.
cuándo será seguro retirar el iframe de el DOM? – AMember