Foros del Web » Programando para Internet » PHP »

Descarga de contenido mediante PHP.... ayuda please

Estas en el tema de Descarga de contenido mediante PHP.... ayuda please en el foro de PHP en Foros del Web. Hola.... saben que tengo un problema con un script PHP. Se trata de una aplicación que me permite descargar contenido desde una base de datos ...
  #1 (permalink)  
Antiguo 28/12/2003, 18:25
 
Fecha de Ingreso: diciembre-2003
Ubicación: Santiago de Chile
Mensajes: 2
Antigüedad: 14 años
Puntos: 0
Descarga de contenido mediante PHP.... ayuda please

Hola.... saben que tengo un problema con un script PHP. Se trata de una aplicación que me permite descargar contenido desde una base de datos MySQL en forma de archivos (JPG, GIF, DOC, ZIP, etc). La fuente del script es la siguiente:
Código PHP:
/*archivos.php
   (C)2003 por Mr_Trukito. All Rights Reserved
*/

<?php require ("config_db.php"); ?>
<? 
if ($_GET["app"]    !="download") {
    include (
"header.inc");
    if (!isset(
$_GET["app"])) { ?>
        <form enctype="multipart/form-data" action="?app=upload" method="post" />
        Descripción <input type="text" name="titulo" size="30" />
        Ubicación <input type="file" name="nombrearchivo" />
        Tabla <input type="text" name="tabla" size="20" />
        <input type="submit" value="Enviar archivo">
        </form>
    <?php } if ($_GET["app"]=="upload") {
        
$conn=mysql_connect($db_server,$db_username,$db_password);
        
mysql_select_db($db_database,$conn);
            
        
$file_temp=$_FILES["nombrearchivo"]["tmp_name"]; 
        
$file_size=$_FILES["nombrearchivo"]["size"];
        
$file_type=$_FILES["nombrearchivo"]["type"];
        
$file_name=$_FILES["nombrearchivo"]["name"];
        
$titulo=$_POST["titulo"];
        
        if (
$archivo!="none") {
            
$fp fopen($file_temp"rb");
            
$contenidofile_get_contents($file_temp);
            
$contenido base64_encode($contenido);
            
fclose($fp); 
    
            if (
$tabla == "") {
                
$qry="INSERT INTO archivos VALUES (0,'$file_name','$titulo','$contenido','$file_type')";
            } else {
                
$qry="INSERT INTO ".$tabla." VALUES (0,'$file_name','$titulo','$contenido','$file_type')";
                }
            
mysql_query($qry);
    
            if (
mysql_affected_rows($conn) > 0) print "Se ha guardado el archivo en la base de datos.";
            else print 
"NO se ha podido guardar el archivo en la base de datos.";
            }
        else print 
"No se ha podido subir el archivo al servidor";
        }
    include (
"footer.inc");
    }
if (
$_GET["app"]=="download") {
    
$conn=mysql_connect($db_server,$db_username,$db_password);
    
mysql_select_db($db_database,$conn);

    if (isset(
$_GET["filename"])) {
        if (!isset(
$_GET["tabla"])) {
            
$qry "SELECT tipo, contenido FROM archivos WHERE nombre='".$_GET['filename']."'";
             
$res mysql_query($qry);
             @
$tipo mysql_result($res0"tipo");
             @
$contenido mysql_result($res0"contenido");
            
$contenido=base64_decode($contenido);
            }
        } else {
            
$qry "SELECT tipo, contenido FROM ".$_GET["tabla"]." WHERE nombre='".$_GET['filename']."'";
             
$res mysql_query($qry);
             @
$tipo mysql_result($res0"tipo");
             @
$contenido mysql_result($res0"contenido");
            
$contenido=base64_decode($contenido);
            }
    
    
header("Content-type: $tipo");
     print 
$contenido
?>
Para descargar un archivo, a esta aplicación le entrego el nombre de archivo mediante URL. Por ejemplo, para descargar el archivo "programa.zip", utilizo la url http://localhost/archivos.php?app=do...e=programa.zip

Hasta aquí va todo bien, pero el problema surge, cuando el browser le asigna un nombre al archivo que se va a descargar. El archivo queda con el nombre del script (en este caso, se descarga como "archivo.php"), y lo ideal sería que se le asignara el nombre "archivo.zip", o el nombre que debiese tener, cuando corresponda.

¿Qué debo agregar a la aplicación para que funcione correctamente? :?:

Muchas gracias,

Última edición por Mr_Trukito; 28/12/2003 a las 18:34
  #2 (permalink)  
Antiguo 28/12/2003, 21:03
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Bueno .. para controlar todo eso tienes el protocolo HTTP (el cual no cumplen todos los navegadores ¬¬) .. en el se describen ciertas cabeceras HTTP que debes emplear para definir parámetros como el del nombre que va a tener a la hora de descargar tu archivo .. o incluso indicarle el tamaño que tiene tu archivo como para que gestores de descargas puedan ir calculando el tiempo que queda para la descarga finalizada.

Tienes un ejemplo que usa la mayoría de esas cabeceras HTTP en esta FAQ de este foro:

http://www.forosdelweb.com/showthrea...781#post306781

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 30/12/2003, 22:10
 
Fecha de Ingreso: diciembre-2003
Ubicación: Santiago de Chile
Mensajes: 2
Antigüedad: 14 años
Puntos: 0
Muchas gracias por tu ayuda.....
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 12:57.