Foros del Web » Programando para Internet » PHP »

Formularios con descarga de archivos

Estas en el tema de Formularios con descarga de archivos en el foro de PHP en Foros del Web. Hola! Tengo un problema con un formulario para descargar archivos, a ver si podéis aclararme unas cosillas: En el mismo archivo .php, tengo metidos 2 ...
  #1 (permalink)  
Antiguo 31/07/2011, 06:17
Kzn
 
Fecha de Ingreso: julio-2011
Mensajes: 4
Antigüedad: 12 años, 8 meses
Puntos: 1
Pregunta Formularios con descarga de archivos

Hola! Tengo un problema con un formulario para descargar archivos, a ver si podéis aclararme unas cosillas:

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!

Última edición por Kzn; 31/07/2011 a las 09:23

Etiquetas: descarga, html, formulario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:08.