En el mismo archivo .php, tengo metidos 2 formularios html, uno para subir archivos a un servidor, y otro para mostrar en un historial los archivos subidos, seleccionar uno de ellos y descargarlo. El primero va bien (exceptuando que al pulsar F5, se vuelve a subir el último archivo seleccionado, pero eso no me preocupa mucho), pero el segundo da problemas con algunos navegadores (con Chrome va bien, con Firefox no). El problema es el siguiente, una vez descargas el primer archivo (lo hace bien), cuando seleccionas otro para descargar, en vez de bajarlo lo que hace es mostrar el código html de la página.
En ambos formularios uso como action $PHP_SELF, imagino que el problema es ese, que se quedan guardados los valores antiguos y de alguna forma falla.
Me gustaría que al pulsar en el botón "descargar", bajara el fichero seleccionado sin cambiar de página, pero creo que la forma de solucionarlo es precisamente hacer que cambie de página (quizás si abriera una página externa serviría, no sé...).
Pongo aquí el código del segundo formulario:
Código PHP:
<FORM METHOD="post" ACTION="<?=$PHP_SELF?>" ENCTYPE="application/x-www-form-urlencoded" NAME="form2" id="form2">
<p>
<?php
print("Historial<br>");
print ("<select size=\"6\" name=\"historial\" id=\"historial\">");
print ("<option selected value=\":\">----------------------------</option>");
if(@$dir = dir("/var/www/tmp/cpgcluster/".$_SERVER['REMOTE_ADDR'])){
while($elem = $dir->read()){
if('txt' == strtolower(end(explode('.',$elem)))){
print("<option value=\"$elem\">$elem</option>");
}
}
print("</select>");
$dir->close();
}
?>
</p>
<p>
<input type="submit" value="Download" name="descargar">
</p>
</FORM>
Y aquí la parte php que se ejecuta cuando se pulsa el botón de este formulario:
Código PHP:
<?php
if($_POST['descargar']){
//unset($_POST['descargar']);// = array();
if($_POST['historial'] != ":" && file_exists("/var/www/tmp/cpgcluster/".$_SERVER['REMOTE_ADDR']."/".$_POST['historial'])){
$file = file("/var/www/tmp/cpgcluster/".$_SERVER['REMOTE_ADDR']."/".$_POST['historial']);
$file2 = implode("",$file);
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Disposition: attachment; filename=".$_POST['historial']."\r\n\r\n");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".strlen($file2)."\n\n");
echo $file2;
}
}
?>
No estoy muy experimentado en html/php, así que lo mismo he metido la pata con las cabeceras...
En este último código hay un comentario con //unset(...), lo probé pero tampoco sirve.
Perdón si algo no se entiende, avisadme si necesitáis más detalles o cualquier cosa.
Muchas gracias, un saludo!