Ver Mensaje Individual
  #13 (permalink)  
Antiguo 02/03/2004, 05:27
jcorba
Invitado
 
Mensajes: n/a
Puntos:
Hola,

Finalmente he implementado este código el cual funciona en IE 6.0 SP1, IE 5.0 SP2 ,IE 6.0 (con la salvedad de que en estos dos ultimos si abrimos el fichero y no lo descargamos hay que dar dos veces al boton abrir), Netscape 7.1, Mozilla 1.6 y Netscape 7.0 (con la salvedad que el nombre con el que intenta salvar le añade la extension .php --> esto esta solucionado con la version 7.1),

Todo ha sido probado con navegadores bajo windows 2000/XP.
Es codigo final es:

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();
}