Foros del Web » Programando para Internet » PHP »

problema con descarga de archivos!!

Estas en el tema de problema con descarga de archivos!! en el foro de PHP en Foros del Web. q mas amigos speor esten ,bien, tenia tiempo q no escribia por aki, de antemao le doy las gracias a todos los q me pudieron ...
  #1 (permalink)  
Antiguo 07/03/2006, 17:43
Avatar de Bullet  
Fecha de Ingreso: agosto-2005
Ubicación: Margarita, Venezuela
Mensajes: 231
Antigüedad: 12 años, 4 meses
Puntos: 1
problema con descarga de archivos!!

q mas amigos speor esten ,bien, tenia tiempo q no escribia por aki, de antemao le doy las gracias a todos los q me pudieron ayudar con lo de mi pagina par ami proyecto de grado, ya expuse y todo em salio bien, ahora estuve haciendole las correciones pero encontre un problemita muy simpatico, en la aprte de la descarga de los archivos lo hace todo bien, los sube, los baja, pero cuandno lso voy a abrir, abren unas cosas extrañas, y a veces hasta abreen el contenido de la pagina html, es como q si baja los archivos malos.

Revise el codigo completo y no se que pueda ser, bueno l codigo los sube y los baja perfectos
  #2 (permalink)  
Antiguo 07/03/2006, 18:00
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 12 años, 9 meses
Puntos: 33
Seria interesante que dijeras como estas mostrando la informacion de tus archivos
  #3 (permalink)  
Antiguo 07/03/2006, 18:46
Avatar de Bullet  
Fecha de Ingreso: agosto-2005
Ubicación: Margarita, Venezuela
Mensajes: 231
Antigüedad: 12 años, 4 meses
Puntos: 1
Cita:
Seria interesante que dijeras como estas mostrando la informacion de tus archivos

que mas mauled, bueno en la base cargo el id, nombre, path, categoria y una descripcion de lo q' trata el archivo, pero todo eos esta bien y los datos se cargan perfectos, el problema esta en q cuanod lo bajo y lo abro el archivo esta lleno de basura!!

Última edición por Bullet; 07/03/2006 a las 21:37
  #4 (permalink)  
Antiguo 08/03/2006, 01:39
 
Fecha de Ingreso: agosto-2004
Mensajes: 118
Antigüedad: 13 años, 4 meses
Puntos: 1
Revisa las cabeceras que envias al navegador cliente, en la mayoría de los casos este es el problema. Yo utilizo una función para realizar la descarga de los ficheros y estas cabeceras, de momento, me han funcionado correctamente:
Código PHP:
//Función para el envio fisico del fichero al navegador web del usuario
function descargaFichero ($fichero)
        { 
// HEADERS SACADAS DE PHPMYADMIN
        
$filename basename($fichero);
        
$filesize filesize($fichero);

        
// 'application/octet-stream' is the registered IANA type but
        // MSIE and Opera seems to prefer 'application/octetstream'
        
$USR_BROWSER_AGENT="";
        if (
preg_match('@Opera(/| )([0-9].[0-9]{1,2})@'$_SERVER['HTTP_USER_AGENT'])) $USR_BROWSER_AGENT='OPERA';
        if (
preg_match('@MSIE ([0-9].[0-9]{1,2})@'$_SERVER['HTTP_USER_AGENT'])) $USR_BROWSER_AGENT='IE';
        
$mime_type = ($USR_BROWSER_AGENT == 'IE' || $USR_BROWSER_AGENT == 'OPERA')
        ? 
'application/octetstream'
        
'application/octet-stream';

        
// Esta funcion esta operativa desde php 4.3.0 y parece ser que tiene buena pinta arreglando el nombre de los 
        // ficheros y las extensiones
        //$mime_type=mime_content_type ($fichero);
        
        
header('Content-Type: ' $mime_type);
        
// Se informa al navegador del tamaño del fichero y puede mostrar la barra de
        // progreso de descarga
        
header('Content-Length: ' filesize($fichero));
        
header('Content-Transfer-Encoding: binary');
        
header('Expires: ' gmdate('D, d M Y H:i:s') . ' GMT');
        
// IE need specific headers
        
if ($USR_BROWSER_AGENT == 'IE'
            {
            
//header('Content-Disposition: inline; filename="' . $filename . '"');
            
header('Content-Disposition: attachment; filename="' $filename '"');
            
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
            
header('Pragma: public');
            } 
            else
                {
                
header('Content-Disposition: attachment; filename="' $filename '"');
                
header('Pragma: no-cache');
                }
        @
readfile ($fichero);
        exit();
        } 
Esta función la encontre en este mismo foro, sólo comentarte que estoy trabajando en una pequeña corrección cuando el navegador es netscaspe y derivados, lo que sucede es que renombra el fichero descargado a .php; en internet explorer funciona 100%.
Te la dejo por si te puede orientar de algún modo
  #5 (permalink)  
Antiguo 08/03/2006, 11:51
Avatar de Bullet  
Fecha de Ingreso: agosto-2005
Ubicación: Margarita, Venezuela
Mensajes: 231
Antigüedad: 12 años, 4 meses
Puntos: 1
thanks rayder la voy a probar a ver q tal!!Saludos
  #6 (permalink)  
Antiguo 14/03/2006, 16:46
Avatar de Bullet  
Fecha de Ingreso: agosto-2005
Ubicación: Margarita, Venezuela
Mensajes: 231
Antigüedad: 12 años, 4 meses
Puntos: 1
Q mas amigos, rayder probe tu funcion y me sigue dando el mismo problema, los archivos los puedo subir y los puedo descargar, pero cuando los abro, stan corruptos, nose si seran los scripts.!!!!
  #7 (permalink)  
Antiguo 14/03/2006, 16:56
Avatar de helthon  
Fecha de Ingreso: junio-2005
Ubicación: Lima
Mensajes: 549
Antigüedad: 12 años, 6 meses
Puntos: 7
Creo que para que te puedan dar una mejor respuesta seria bueno que pongas el script.
Cita:
el problema esta en q cuanod lo bajo y lo abro el archivo esta lleno de basura!!
Que es basura para ti?
__________________
HELTHON FUENTES
FLORERIA FLORES PERU Floresperu.com.pe
Garantizamos que cada entrega de flores será de la más alta calidad y frescura
  #8 (permalink)  
Antiguo 15/03/2006, 15:39
Avatar de Bullet  
Fecha de Ingreso: agosto-2005
Ubicación: Margarita, Venezuela
Mensajes: 231
Antigüedad: 12 años, 4 meses
Puntos: 1
aki les va el script, es algo largo, por lo q voy a poner solo la parte q descarga el archivo:

Código PHP:
<?
//********************************** CONECCIÓN*****************************
    
include('descargafichero.php');
        
$conex mysql_connect("localhost","root");
        
mysql_select_db("db_ihm"$conex);
//********************************descarga*********************************
// setup the query
$query "select file_path, file_name from tbl_files where file_id = $fid";

// get results
if($result mysql_query$query$conex)) {
    
    
// if we have results
    
if($row mysql_fetch_array($result)) {

        
// get filename and path
        
$file_name $row['file_name'];
        
$file_path $row['file_path'];
                
        
// send the necessary headers.
        // i found that these work well.
        
header("Content-Type: application/octetstream");
        
header("Content-Disposition: filename= $file_name");
        
        
// open the file for reading and start dumping it to the browser
        
if($fp fopen($file_path.$file_name"r")) {
            while(!
feof($fp)) {
                echo  
fgets($fp4096);
            }
            
// close the file
            
fclose($fp);
        }
    }
}


?>
esta es la parte del codigo q uso para bajar el archivo, nose si seran las cabeceras o que!! spero me puedan ayudar!!saludos
  #9 (permalink)  
Antiguo 17/03/2006, 17:57
Avatar de Bullet  
Fecha de Ingreso: agosto-2005
Ubicación: Margarita, Venezuela
Mensajes: 231
Antigüedad: 12 años, 4 meses
Puntos: 1
que mas amigos, bueno sigo con el mismo problemita de los archivos, pero ahora consegui otros script q estoy probando, pero ahora descarga los archivos vacios, aki les dejo los scripts para q los vean:

Script de subida (subida.php)
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)";
    
$sql.= "VALUES ('$id', '$nombre_archivo','$tipo_archivo','$tamano_archivo')";
    
$result=mysql_query($sql);
    }else{
        echo 
"Ocurrió algún error al subir el fichero. No pudo guardarse.";
    }
?>
Script de lista de archivos(lista_archivos.php)
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 descargas (descargar_archivos.php)
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;
}

?>
spero mepuedan ayudar. saludos
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 17:52.