Foros del Web » Programando para Internet » PHP »

Error descarga archivos

Estas en el tema de Error descarga archivos en el foro de PHP en Foros del Web. Hola amigos del foro. Tengo un par de problemas a la hora de descargar archivos. El primero es que si utilizo header("Content-Length: ".$size); a la ...
  #1 (permalink)  
Antiguo 09/09/2015, 06:27
 
Fecha de Ingreso: julio-2012
Mensajes: 81
Antigüedad: 11 años, 8 meses
Puntos: 3
Error descarga archivos

Hola amigos del foro.
Tengo un par de problemas a la hora de descargar archivos.
El primero es que si utilizo header("Content-Length: ".$size); a la hora de descargar el archivo desde localhost me da el siguiente error al abrirlo: "El archivo tiene un formato desconocido o esta dañado."

y el segundo problema es que cuando intento descargar el archivo desde un servidor al pinchar en el enlace de descarga me aparece una ventana con simbolos extraños y no me descarga el archivo.

Mi código es el siguiente:
Código PHP:
        if (!isset($_GET['archi']) || empty($_GET['archi'])) {
            exit();
        }
        
        
$root "download/";
        
$file basename($_GET['archi']);
        
$path $root $file.".zip";      
        
$type '';

        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);
            }
            if (
$type == '') {
                
$type "application/force-download";
            }
            
            
// Definir headers            
            
header("Content-Type: $type");
            
header("Content-Disposition: attachment; filename=$file.zip");
            
header("Content-Transfer-Encoding: binary");
            
header("Content-Length: " $size);  
            
// Descargar archivo
            
readfile($path);
        } else {
            die(
"El archivo no existe.");
        } 
Gracias por vuestro tiempo y un saludo.
  #2 (permalink)  
Antiguo 09/09/2015, 08:28
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Error descarga archivos

El código que muestras se ve correcto, ¿seguro que ese es el 100% del script?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 09/09/2015, 08:42
 
Fecha de Ingreso: julio-2012
Mensajes: 81
Antigüedad: 11 años, 8 meses
Puntos: 3
Respuesta: Error descarga archivos

Si que es el 100% de script.
No tengo nada modificado.
  #4 (permalink)  
Antiguo 09/09/2015, 08:46
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Error descarga archivos

¿Y las etiquetas de inicio y cierre de php se pintan solas o cómo?

En teoría después del readfile() deberías usar exit() para evitar salidas extra al final del mismo.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 09/09/2015, 11:07
 
Fecha de Ingreso: julio-2012
Mensajes: 81
Antigüedad: 11 años, 8 meses
Puntos: 3
Respuesta: Error descarga archivos

Esté es todo el código y con etiquetas de apertura y de cierre
Además he añadido el exit como me indicaste
Código PHP:
<?php
    
function Downloads() {
        if (!isset(
$_GET['archi']) || empty($_GET['archi'])) {
            exit();
        }
        
        
$root "download/";
        
$file basename($_GET['archi']);
        
$path $root $file.".zip";      
        
$type '';

        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);
            }
            if (
$type == '') {
                
$type "application/force-download";
            }
            
// Definir headers
            
            
header("Content-Type: $type");
            
header("Content-Disposition: attachment; filename=$file.zip");
            
header("Content-Transfer-Encoding: binary");
            
header("Content-Length: " $size);  //Esta linea da error en localhost

            // Descargar archivo
            
readfile($path);
            exit(); 

        } else {
            die(
"El archivo no existe.");
        }
    }
?>
  #6 (permalink)  
Antiguo 09/09/2015, 11:13
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Error descarga archivos

A ver, ¿entonces definiste Downloads() como función pero exactamente dónde y cómo la usas?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 09/09/2015, 11:16
 
Fecha de Ingreso: julio-2012
Mensajes: 81
Antigüedad: 11 años, 8 meses
Puntos: 3
Respuesta: Error descarga archivos

Esta dentro de una clase. Utilizo el Modelo vista controlador.
  #8 (permalink)  
Antiguo 09/09/2015, 11:18
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Error descarga archivos

¿Y no crees que el problema radique ahí entonces?

Porque el script de descarga es perfecto, no podemos adivinar el 100% de tu sistema para entender.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 09/09/2015, 11:20
 
Fecha de Ingreso: julio-2012
Mensajes: 81
Antigüedad: 11 años, 8 meses
Puntos: 3
Respuesta: Error descarga archivos

Mejor así...

Enlace:
<a href="index.php?ctl=descargas&archi=archivo">Desca rgar Archivo</a>

Controlador:
Código PHP:
function misDescargas(){
            
$sec=new secciones();            
            
$sec->Downloads();
        } 

Clase secciones:
Código PHP:
<?php
class secciones{
    function 
Downloads() {
        if (!isset(
$_GET['archi']) || empty($_GET['archi'])) {
            exit();
        }
        
        
$root "download/";
        
$file basename($_GET['archi']);
        
$path $root $file.".zip";      
        
$type '';

        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);
            }
            if (
$type == '') {
                
$type "application/force-download";
            }
            
// Definir headers
            
            
header("Content-Type: $type");
            
header("Content-Disposition: attachment; filename=$file.zip");
            
header("Content-Transfer-Encoding: binary");
            
header("Content-Length: " $size);  //Esta linea da error en localhost
            // Descargar archivo
            
readfile($path);
            exit();
        } else {
            die(
"El archivo no existe.");
        }
    }
}
?>
  #10 (permalink)  
Antiguo 09/09/2015, 12:38
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Error descarga archivos

Sigue sin entenderse nada.

A ver, en algún lado de tu sistema de MVC es que haces la carga de todo, puede que ahí metas algo que no deberías.

Inclusive un include/require con espacios al final puede arruinar todo, ¿cómo podríamos saber exactamente todos los pasos que realiza tu sistema?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Etiquetas: Ninguno
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 20:09.