Descarga de archivos

¿Hola cómo estas? Espero me puedas ayudar con mi problema. Desarrollo un sitio con php en el cual necesito descargar un archivo que genero dinámicamente de una consulta, el detalle radica en que lo necesito en formato .xls y no se como programar para descargarlo con la condición de que el archivo no se abra en el explorador como en la respuesta que en una ocasión estableciste
Bueno te agradezco previamente.

1 respuesta

Respuesta
1
Esto es para provocar al navegador a manejar el HIPERVÍNCULO como guardar como..
header ( "Expires: Mon, 1 Apr 1974 05:00:00 GMT" );
header ( "Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT" );
header ( "Cache-Control: no-cache, must-revalidate" );
header ( "Pragma: no-cache" );
header ( "Content-type: application/x-msexcel" );
header ( "Content-Disposition: attachment; filename=miarchivo.xls" );
header ( "Content-Description: Un Archivo excell generado" );
luego haces todos los echo...
Prueba este ejemplo:
prueba.html
<html>
<body>
<a href="xxx.php">Click Aca</a>
</body>
</html>
xxx.php:
(lo que puse arriba), y luego
echo "asdfj sdjaskldklsdfaskl djfsdalkñ fjasdkl fasdklf";
die();
Vas a ver que te pregunta por Guardar como..
¿Es eso lo que necesitas?
Saludos
Pablo.
P.D. Si no es así, me tienes al tanto..
No me supe explicar, bueno te mando un script sobre el cual me base para realizar esta operación de descarga:
//nombre Comprimidos.php
<?
if(!empty($ficherogz))
{
header("Content-Type:application/gzip");
readfile($ficherogz);
exit;
}
?>
<title>comprimidos</title>
<html>
<body>
<H1>Servir ficheros comprimidos </H1>
<FORM ACTION="<? echo "$PHP_SELF" ?>" METHOD="POST" >
<? echo "Seleciona el fichero<SELECT NAME=\"ficherogz\">";
$f = opendir "Descarga");
$fn = readdir($f);
while ($fn)
{
$fn = readdir($f);
if (ereg("gz$",$fn))
echo "<OPTION VALUE='$fn' > $fn\n";
}
?>
</SELECT>
<INPUT TYPE="SUBMIT" NANE=boton
VALUE="descargar">
</FORM>
<p>
<CENTER><A HREF="<? echo $PHP_SELF ?>"> Volver</A></CENTER><p>
</body>
</html>
Lo que de aquí necesito modificarle es que en lugar de archivos comprimidos con extensión gz, me de la opción de descargar archivos xls o slk para poder trabajar con ellos en excel
Instale el script en mi sistema y funcionó..
Lo único que cambie es:
en if(ereg("gz$", $fn))
por :
if (ereg("xls$", $fn))
y en el principio, agregué:
header ( "Content-Disposition: attachment; filename=$ficherogz" );
(Para que te de automáticamente el nombre),
Y cambie el header anterior por:
header("Content-type: application/x-msexcel");
y .. voala!.. funciona.
Ahh.. en IE no te pone que es excel, sino que es php, y en Netscape funciona bien.
Ahora.. si quieres que busque los DOS TIPOS (o tres), tienes que hacer:
if ((ereg("xls$",$fn)) or (ereg("gz$", $fn)))
y luego lo mismo antes del header:
if (ereg("xls$",$ficherogz)) {
header("Content-type: application/x-msexcel");
header ( "Content-Description: Un Archivo excell generado" );
}else if(ereg("gz$",$ficherogz)) {
header("Content-type: application/gzip");
header ( "Content-Description: Un Archivo comprimido" );
}
header ( "Content-Disposition: attachment; filename=$ficherogz" );
De esa manera.. va a funcionar...
¿Era eso?
Ahora.. si quieres que AUTOMÁTICAMENTE te descomprima el archivo, y te entregue el archivo descomprimido, es otra historia.. si quieres la publicas como otra pregunta.. tipo:
¿Cómo hago para descomprimir un archivo gzip y entregar el contenido?
Porque de esa manera, no solo estaré colaborando con vos, sino también con otros usuarios que puedan tener la misma duda :)
como puedo entregar el contenido de un archivo compreso al momendo de descargarlo con
header("Content-Type:application/gzip");
Otro tema, en donde puedo encontrar toda la información lo que respecta a los headers de http.
Espero no te moleste la insistencia en el tema
La info de los headers esta en:
http://www.w3.org/Protocols/HTTP/Object_Headers.html
y si queres DESCOMPRIMIR un gzip para enviar el contenido.. fijate en esta clase:
http://www.phpclasses.org/browse.html/package/587.html
Cualquier cosa, me tienes al tanto.. es bastante fácil de entender..

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas