Tengo un archivo donde tengo un botón que al ser pulsado llama a otro fichero PHP que crea un archivo .zip de un directorio.
Mi problema es que quiero que tras pulsar el botón y ser creado el .zip se ponga automáticamente a descargar. Es decir que salga la típica ventana de descarga del navegador.
Para llamar al archivo PHP que crea el .zip lo hago con ajax ya que la página no debe ser redireccionada.
El archivo PHP que crea el .zip lo hace correctamente así que por ese lado funciona, y si le pongo que el resultado me lo meta en un alert (si ya se algo raro pero es para probar) este se me llena de simbolos raros (normal) pero al menos se que algo está enviado, lo único que no soy capaz de que se muestre.
El Javascript es el siguiente:
Código Javascript:
Ver original
$(".down").on("click",function(){ id = this.id; $.ajax({ type: "POST", url: "/down.php", data: "id="+id, cache: false, success: function(data){ //alert(data) } }); });
El código PHP que genera el file y devuelve el archivo es el siguiente es el siguiente:
Código PHP:
<?php
session_start();
if(!isset($_SESSION['username'])){ header("Location: login.php"); }
$id=$_POST['id'].'/';
ini_set('max_execution_time', 300);
$zip = new ZipArchive();
$zip_name='project_'.rand().'.zip';
if ($zip->open($zip_name, ZIPARCHIVE::CREATE) !== TRUE) {
die ("Can't open the file");
}
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($id));
foreach ($iterator as $key=>$value) {
$zip->addFile(realpath($key), $key) or die ("ERROR: $key");
}
$zip->close();
if(file_exists($zip_name)){
header('Content-type: "application/zip"');
header('Content-Disposition: attachment; filename="'.$zip_name.'"');
readfile($zip_name);
unlink($zip_name);
}
?>
Gracias de antemano.