Foros del Web » Programando para Internet » PHP »

DEscarga de archivos!!

Estas en el tema de DEscarga de archivos!! en el foro de PHP en Foros del Web. q mas amigos, espero esten bien, escribo en esta oportunidad porq' sigo con l problemita de la descarga de los archivos, les voy a dejar ...
  #1 (permalink)  
Antiguo 20/03/2006, 22:41
Avatar de Bullet  
Fecha de Ingreso: agosto-2005
Ubicación: Margarita, Venezuela
Mensajes: 235
Antigüedad: 18 años, 8 meses
Puntos: 1
DEscarga de archivos!!

q mas amigos, espero esten bien, escribo en esta oportunidad porq' sigo con l problemita de la descarga de los archivos, les voy a dejar los scripts q uso para q los vean:
Script de Subida
Código PHP:
<?
$conex
=mysql_connect('localhost','root');
mysql_select_db('bd_prueba',$conex);
//tomo el valor de un elemento de tipo texto del formulario
//echo "Escribió en el campo de texto: " . $cadenatexto . "<br><br>";
//datos del archivo
$nombre_archivo $HTTP_POST_FILES['userfile']['name'];
$tipo_archivo $HTTP_POST_FILES['userfile']['type'];
$tamano_archivo $HTTP_POST_FILES['userfile']['size'];
if (( 
strpos($tipo_archivo"doc") || strpos($tipo_archivo"ppt") || strpos($tipo_archivo"pdf") || strpos($tipo_archivo"zip") || strpos($tipo_archivo"rar") || strpos($tipo_archivo"txt")) && ($tamano_archivo <= 200000)) {
    echo 
"La extensión o el tamaño de los archivos no es correcta.";
}else
    if (
move_uploaded_file($_FILES['userfile']['tmp_name'], "../prueba/archivos/" .$nombre_archivo)){
        echo 
"El archivo ha sido cargado correctamente.";
    
//$d= "Appserv/www/IHM/archivos/";
    
$sql "INSERT INTO temaris2 (id, filename,filetype, filesize, filecontents)";
    
$sql.= "VALUES ('$id', '$nombre_archivo','$tipo_archivo','$tamano_archivo', '$filecontents')";
    
$result=mysql_query($sql);
    }else{
        echo 
"Ocurrió algún error al subir el fichero. No pudo guardarse.";
    }
?>
Script de listar archivos
Código PHP:
<?
mysql_connect
('localhost','root');
mysql_select_db('bd_prueba');
$query "SELECT id, filename FROM temaris2";
$result mysql_query($query) or die('Error, la consulta no es pot realitzar');
if(
mysql_num_rows($result) == 0)
{
echo 
"No hi ha cap temari<br>";
}
else
{
while(list(
$id$filename) = mysql_fetch_array($result))
{
?>
<a href="descargar_archivo.php?id=<?=$id;?>"><?=$filename;?></a> <br>
<?
}
}
?>
Script de descarga
Código PHP:
<?
mysql_connect
('localhost','root');
mysql_select_db('bd_prueba');
if(isset(
$_GET['id']))
{
$id $_GET['id'];
$query "SELECT filename, filesize, filetype FROM temaris2 WHERE id = '$id'";
$result mysql_query($query) or die('Error, la consulta ha fallat');
list(
$filename$filetype$filesize) = mysql_fetch_array($result);
header("Content-Disposition: attachment; filename=$filename");
header("Content-length: $filesize");
header("Content-type: $filetype");
echo 
$filecontents;
}
?>
los dos ultimos los consegui aki en una discusión q abrieron hace unos dias atras, este es el enlace: http://www.forosdelweb.com/showthrea...2descarga+arch ivos%22
bueno, el detalle es q utilice el script de subida que yo tenia y lo acople a los otros dos, pero lo q no entiendo es q se utiliza una variable llamada "$filecontents", que es el contenido q tiene el archivo, esta es la unica variable q falta por leer en la BD, y no se como hacerlo, en un momento pense q era la direccion dond se encuentra el archivo al momento de descargarlo pero nop, le asigne un valor cualquiera y me di cuenta q esta variable guarda el contenido del archivo; lo que me falta hacer nada mas es como leer el contenido del archivo para q' no lo baje vacio. Spero me puedan ayudar. Saludos!!!
  #2 (permalink)  
Antiguo 22/03/2006, 12:28
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
No entendí mucho que pretendes hacer.

Al parecer por un lado intentas almacenar tu archivo en el sistema de archivos del servidor (como archivo en cierto directorio .. para eso usas "move_uploaded_file()" para darle destino definitivo en tu sito).

Por otro lado "intentas" tratar el archivo como un "binario" (que en tu caso no sería) almacenado en la BBDD.

Si quieres gestionar sólo en tu BBDD el nombre del archivo que subes (no almacenandolo integro como binario) como así lo estás haciendo .. entonces tu actual "$filecontents" debería ser el nombre del archivo que subistes: $nombre_archivo

Eso sería para la parte de la "carga" del archivo .. Pero para descargarlo tendrías que leerlo y entregarlo al buffer de salida de PHP .. esto se hace todo en una con la función:

readfile()
www.php.net/readfile

Previamente compones como ya haces las cabeceras HTTP para indicar que los datos que envias son para descargar.

Es decir .. tendrías que hacer algo tipo (para el script de descargas):

Código PHP:
<?
// consulta SQL para obtener el nombre del archivo que ya tendras en tu BBDD
// componer las cabeceras HTTP adecuadas (header(...))

// Leer el archivo de su ubicación física y entregarlo al buffer de salida de PHP:
readfile("../prueba/archivos".$filename);
?>
Pero lo dicho .. lo primero que debes aclararte es que tipo de gestión de archivos vas hacer ..por qué como veras se puede hacer por dos métodos diferentes: referenciar el nombre del archivo en tus BBDD ó almacenar el archivo completo en "binario" sobre un campo de tu BBDD.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 13:09.