Ver Mensaje Individual
  #4 (permalink)  
Antiguo 08/03/2006, 01:39
rayder
 
Fecha de Ingreso: agosto-2004
Mensajes: 118
Antigüedad: 19 años, 8 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