Hace unas semanas puse una forma de forzar la descarga de un archivo con PHP pero ahora les pongo otra forma:
- function descargaFichero ($fichero)
- {
- $filename = basename($fichero);
- $filesize = filesize($fichero);
- // 'application/octet-stream' es un tipo MIME registrado pero
- // MSIE y Opera prefieren manejarlo asi '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 puede ser una buena opcion para obtener el tipo MIME de un
- // fichero y su extension
- //$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 necesita que le especifiquen las cabeceras
- 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();
- }
Para usar el script es solo mandar a llamar la funcion de esta forma:
- descargaFichero ("miarchivo.ppt");
Leave A Comment
You must be logged in to post a comment.