Forzado de descargas en php

NeB1

a ver si alguien sabe que tengo mal.

Tengo un index.php con una función javascript que hace esto:

function redirect(e){
  var aux=e.split("_");
  switch (aux[0]){
    case "1":
         window.location.href="./index.php?filtro="+aux[1];
	break;
	case "2":
	  alert('./descargas.php?f='+aux[1]);
          window.open('./descargas.php?f='+aux[1],null,null);
	break;
  }
}

nos interesa el case 2. el alert muestra por pantalla "./descargas.php?f=PLACO.pdf" al seleccionar cierta opción, y llama a este otro script

<?php
    $f = $_GET["f"];
    header("Content-type: application/octet-stream");
    header("Content-Disposition: attachment; filename=\"./$f\"\n");
    $fp=fopen("./descargas/$f", "r");
    fpassthru($fp);
?>

el cual debería recoger el nombre del fichero y descargarlo. Pero cuando lo hago, empieza una descarga pero nunca empiezo a descargar, sin embargo, si pongo yo en la url directamente

xxx/descargas.php?f=PLACO.pdf me lo descarga sin problemas, de la otra forma, sé que entra en descargas.php, pero no sé porque no funciona bien la descarga.

PD
willsmith
header("Content-Disposition: attachment; filename=\"./$f\"\n"); 

cambiar por

header("Content-Disposition: attachment; filename=\"./descargas/$f\"\n"); 

Edit:

creo que esta es la mejor forma

    header("Content-type: application/force-download");
    header("Content-Disposition: filename=".basename($_GET["f"]));
    header("Content-Transfer-Encoding: binary");
NeB1

lo he cambiado y me pasa lo mismo, es que lo curioso es que si entro yo manualmente a descargas.php?f=loqueyoquiera va bien, el problema es al hacer el window.open

elkaoD

¿Por qué window.open?

Por cierto, ojito. Pon xxx/descargas.php?f=../index.php y sorpréndete.

Usuarios habituales

  • elkaoD
  • NeB1
  • willsmith