Foros del Web » Programando para Internet » PHP »

archivos corruptos al forzar descarga

Estas en el tema de archivos corruptos al forzar descarga en el foro de PHP en Foros del Web. Amigos. Cómo están.. He estado mirando en otras discuciones y no encuentro solución, ya intenté de todo y mi problema persiste. ojalá que me puedan ...
  #1 (permalink)  
Antiguo 20/10/2010, 13:38
 
Fecha de Ingreso: octubre-2008
Mensajes: 19
Antigüedad: 16 años, 1 mes
Puntos: 1
Pregunta archivos corruptos al forzar descarga

Amigos.
Cómo están..


He estado mirando en otras discuciones y no encuentro solución, ya intenté de todo y mi problema persiste. ojalá que me puedan ayudar.

Resulta que estoy haciendo un sistema de descargas.

tengo una tabla que almacena en un campo el nombre el archivo, que puede ser ZIP, MP3, O JPG o cualquier otro. de esta manera "archivo.XXX"

en el código en cuestión, jalo una variable que contiene el id de archivo y mediante una consulta a mysql obtengo el campo "url" que es donde almaceno el nombre del archivo.

Todo funciona hasta que se quiere abrir el archivo descargado. PAF!.. esta corrupto y no se puede abrir. Lo curioso es que incluso cuando el archivo se descarga lo hace demaciado rápido aún cuando su tamaño sea de más de 10Mb.

Les adjunto el codigo en cuestión. Espero me puedan ayudar a detectar el error o me aconsejen qué hacer para bajar los archivos correctamente.

Saludos a todos

Codigo:
Código PHP:
<?php
//compruebo que este logeado en joomla pues desde ahi tengo detectado al usuario
$ruta_a_joomla "/../";
define'_JEXEC');
define'JPATH_BASE'realpath(dirname(__FILE__).$ruta_a_joomla ));
define'DS'DIRECTORY_SEPARATOR );

require_once ( 
JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( 
JPATH_BASE .DS.'includes'.DS.'framework.php' );
require_once ( 
JPATH_BASE .DS.'configuration.php' );
$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();

$userx = &JFactory::getUser();
if(
$userx->guest){
    die (
"Favor de iniciar sesion");//si no está logueado pido que incie sesión en joomla 
} else {
//si esta logeado entonces recopilo las variables mediante POST. ¿es posible que necesite ser GET.. no lo se?
$clavetemporal$_POST["clave"];//variable con la clave password del usuario con la que compruebo que la descarga esté autorizada
$clavecontenido$_POST["contenido"];//variable con la ID de la descarga
$usuario$userx-> name;//nombre del usuario obtenido de la sesion de joomla
//inicio mi conexion a la BD
$conexion=mysql_connect("localhost","myuser","mypassword")
or die(
"No se puede conectar al server");
mysql_select_db("hachette",$conexion)
or die(
"No se puede seleccionar la BD");
//creo mis consultas para validad la descarga y para obtener el campo "url" de la descarga que contiene el nombre del archivo.
$consulta="SELECT * FROM `luc_hist_claves` WHERE clavecont=$clavecontenido AND name='$usuario' and cavetemp='$clavetemporal'";
$consulta2="SELECT * FROM `luc_cat_cont` WHERE clavecont=$clavecontenido";
$resultado=mysql_query($consulta,$conexion)
or die(
"Operacion fallida: $consulta");
$resultado2=mysql_query($consulta2,$conexion)
or die(
"Operacion fallida: $consulta2");
$row=mysql_fetch_array($resultado2);
if (
mysql_num_rows($resultado) == 0){
    die( 
"Lo siento, su clave no existe, ya no es vigente o no esta relacionada con la descarga solicitada. Solicite una nueva con su asesor pedagogico. Puede ir atras e intentar de nuevo");
}else {
//Aquí esta lo RUDO.. una vez que compruebo que la clave está autorizada viene el código que me da problemas... incluso ya probe quitando todo lo demás y dejando la descarga sola y nada siguen bajando corruptos. 

//primero verifico que el campo URL con el nombre del archivo este lleno
    
if (!isset($row['url']) || empty($row['url'])) {
                    exit();
    }
//Ahora establezco la ruta y el nombre del archivo y formo en PATH completo en la variable "path"

    
$root "packs/";
    
$file basename($row["url"]);
    
$path $root.$file;
    
$type='';
//compruebo que se trate de un archivo y obtengo su tamaño, y tipo de archivo
        
if(is_file($path)) {
                    
$size filesize($path);
        if (
function_exists('mime_content_type')) {
            
$type mime_content_type($path);
        } else if (
function_exists('finfo_file')) {
            
$info finfo_open(FILEINFO_MIME);
            
$type finfo_file($info$path);
            
finfo_close($info); 
        }
//si no tengo el tipo de archivo es decir que la cadena esté vacia porque a lo mejor no exista la libreria mime_content_type, pues forzamos la descarga
        
if ($type == '') {
            
$type "application/force-download";
        }
        
// Ahora los headers que es donde creo que tengo el problema
        
header("Content-Type: $type\n\r");
        
header("Content-Disposition: attachment; filename=$file\n\r");
        
//header("Content-Transfer-Encoding: binary\n\r");
        
header("Content-Length: " $size."\n\r");
        
// Y descargo        
        
readfile($path); //en algunos ejemplos ponen una @ antes de este instrucción. lo intente con ambas opciones 
        
} else {
//si no existe el archivo entonces avisamos 
            
die("No existe el archivo!!");
        }
        
//echo "descarga correcta"; no se si ponerlo también
    
}
    }
?>
PORFAVOR AYUDENME::: ya hasta me duele la cabeza... Creen que sea alguna configuración del servidor... qué puede ser... GRACIAS:
  #2 (permalink)  
Antiguo 21/10/2010, 07:15
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: archivos corruptos al forzar descarga

Hola
inicio de sesión en joomla?? que tiene que ver con la descarga??
y pues yo he visto que joomla tiene extensiones para descargas
de archivos, has intentado con esos?
saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #3 (permalink)  
Antiguo 21/10/2010, 09:34
 
Fecha de Ingreso: octubre-2008
Mensajes: 19
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: archivos corruptos al forzar descarga

Cita:
Iniciado por mortiprogramador Ver Mensaje
Hola
inicio de sesión en joomla?? que tiene que ver con la descarga??
y pues yo he visto que joomla tiene extensiones para descargas
de archivos, has intentado con esos?
saludos
inicio de sesion en joomla: la compruebo porque la aplicaciòn la estoy aplicando dentro de una web hecha con joomla.

y no hay ninguna extenciòn de joomla hasta donde yo se.. que haga lo que necesito... que es trabajar con dos claves secretas una para el login del ssitio y otra para una descarga en particular no para todas las descargas del sitio que es como comunmente trabajan las extenciones de descargas para joomla.

el punto es... la parte de los headers.. ¿tiene algùn error?.. op porqué me baja los archivos corruptos?

saludos.
  #4 (permalink)  
Antiguo 21/10/2010, 11:37
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: archivos corruptos al forzar descarga

pues no se ve nada inusual
has intentado un script aparte, sin joomla??
solo para probar

y pues revisa esto
saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #5 (permalink)  
Antiguo 21/10/2010, 11:49
 
Fecha de Ingreso: octubre-2008
Mensajes: 19
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: archivos corruptos al forzar descarga

Cita:
Iniciado por mortiprogramador Ver Mensaje
pues no se ve nada inusual
has intentado un script aparte, sin joomla??
solo para probar

y pues revisa [URL="http://www.joomlaspanish.org/foros/showthread.php?t=63166"]esto
[/URL]saludos
Ya.. lo intente solito y si funciona, al parecer se trata de que el script debe ir solo sino altera el tamaño de los archivos... lo que hago es que en otra pagina compruebo la autenticidad de la clave y si es correcta llamo al archivo que hace la descarga... menos seguro desdeme mi punto de vista PORQUE TENGO QUE PASAR LA VARIABLE CON EL NOMBRE DEL ARCHIVO MEDIANTE GET y eso se ve en la url pero funciona. Mientras tanto tengo tiempo de seguir buscando la forma de hacerlo de la otra forma.

De hecho la referencia que me diste es un post que hice yo... se supone que todo funcionaba correctametne hata que me di cuenta de que los archivos bajaban dañados....

en fin... MEDIO SOLUCIONADO EL CASO LO DOY POR CERRADO.. MIL GRACIAS POR TU AYUDA... SALUDOS.

Etiquetas: descargas
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 21:36.