Foros del Web » Programando para Internet » PHP »

Bajar archivo sin visualizarlo...

Estas en el tema de Bajar archivo sin visualizarlo... en el foro de PHP en Foros del Web. Estimados amigos: Quisiera bajar un archivo directamente sin visualizarlo. Estuve investigando un poco y leyendo algunas repuestas en este foro y encontre este codigo, pero ...
  #1 (permalink)  
Antiguo 25/03/2004, 09:28
Avatar de Ugho  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 487
Antigüedad: 21 años, 4 meses
Puntos: 0
Bajar archivo sin visualizarlo...

Estimados amigos:
Quisiera bajar un archivo directamente sin visualizarlo. Estuve investigando un poco y leyendo algunas repuestas en este foro y encontre este codigo, pero no entendi mucho y al tratar de incorporarlo a mi codigo no me funciono....por supuesto porque no tengo claro lo que hace.
Quisiera que alguien me ayudara con un ejemplo pratico para utilizar este codigo (si es que esta bien)...ya sea con un link o un boton u otra forma.....
Saludos....
-----------------------------------------------------------
$userfile = "archivos/MIARCHIVO.xls";
$size = filesize($userfile);
$fp=fopen($userfile,"r");
header("Pragma: no-cache");// HTTP/1.0
header("Cache-Control: no-cache, must-revalidate");// HTTP/1.1
header("Content-Type: application/octet-stream");
if(preg_match("/MSIE 5.5/", $HTTP_USER_AGENT)) {
$header = "Content-Disposition: filename=".$userfile;

}else {
$header = "Content-Disposition: attachment; filename=".$userfile;

}
header($header);
$header_str = "Content-Length: ".$size;
header($header_str);
header("Content-Transfer-Encoding: binary\n");
fpassthru($fp);
-----------------------------------------------------------
__________________
________________________________________

Ugho.
  #2 (permalink)  
Antiguo 25/03/2004, 10:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Pero .. que es lo que requieres?

En el código que pusistes ... en esta variable tienes el nombre y ruta del archivo a descargar:

$userfile = "archivos/MIARCHIVO.xls";

Así que si quieres hacer un link tipo (suponiendo que este código lo guardas como descargar.php):

descargar.php?archivo=miarchivo.xls

Podrías usar:

$userfile = "archivos/".$_GET['archivo'];

Pero esto es -altamente- inseguro .. Sólo es para que veas la idea. Lo más seguro si se trata de usar "links" para descargar sería usar identificadores tipo:

descargar.php?archivo=1

siendo .."1" el valor que asocie el indice de un array que contenga los archivos a descargar (nombres/rutas) .. o al "ID" de un registro de tu BD .. etc ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 25/03/2004, 10:42
Avatar de Ugho  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 487
Antigüedad: 21 años, 4 meses
Puntos: 0
Hola Cluster:
Probe 2 cosas, suponiendo que es solo un archivo especifico el que quiero bajar(MIARCHIVO.xls).
Primero trate de descargar el archivo en una misma pagina
Este es el codigo
---------------------------------------
PAGINA1.PHP
-------------------------------------
Código PHP:
<? 

if(isset($_GET['bajar'])){
   
//ejecuto el codigo mencionado.....
}
?>
<html>
<head>
........
<body>
<a href="javascript:document.location='PAGINA1.PHP?ba jar=1'">bajar archivo</a>
......
</body>
</html>
--------------------------------------------------------------------------
yno me hace nada pero si dejo el archivo en la misma ruta de la pagina1.php me baja el archivo pero con el contenido mas el codigo HTML de la PAGINA1.PHP
Luego trato de abrir una POPUP
-----------------------------------------
PAGINA1.PHP
-----------------------------------------
<html>
............
<body>
<a href="javascript:window.open('PAGINA2.PHP?bajar=1' ,'ventana','.....'">Bajar Archivo</a>
</body>
</html>
--------------------------------------------------
PAGINA2.PHP
...............................................
Código PHP:
 <?
//codigo anterior........... 
?>
<html>
<head>
....
<body>
sin nada.....
</body>
</html>
--------------------------------------------------
En este caso no me pregunta si deseo bajar MIARCHIVO.xls sino que PAGINA2.PHP.......
Espero haberme explicado bien...
Que hago mal?
Saludos........
__________________
________________________________________

Ugho.
  #4 (permalink)  
Antiguo 25/03/2004, 10:49
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Lo último que mencionas sobre que te salga a descargar como nombre "pagina2.php" en lugar del nombre del archivo se debe a las cabeceras HTTP que al parecer no se están formando bien o no son interpretadas como esperas por tu navegador .

Intenta usar:

Código PHP:
$header "Content-Disposition: filename=".basename($userfile);

}else {
$header "Content-Disposition: attachment; filename=".basename($userfile); 
con la función basename() nos quedamos sólo con el nombre del archivo si este contiene una ruta dada también (caso de "archivos/miarchivo.xls" ...

Y ten cuidado con los nombres de los archivos .. usa minusculas para todo a ser posible o indica el nombre exacto (minusculas/mayusculas) que uses ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 25/03/2004, 11:00
Avatar de Ugho  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 487
Antigüedad: 21 años, 4 meses
Puntos: 0
Ahora si amigo Cluster:
Me funciono con la funcion basename() como me dijiste, en todo caso el nombre del archivo lo escribi con mayuscula solo para destacar el nombre.
Utilice la primera opcion y perfecto.
Gracias...
Saludos....
__________________
________________________________________

Ugho.
  #6 (permalink)  
Antiguo 29/03/2004, 09:13
Avatar de Ugho  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 487
Antigüedad: 21 años, 4 meses
Puntos: 0
Estimados amigos:
Tengo instalado la version 6.0 de Internet EXplorer y no tengo ningun problema pero si decargo mi archivo con la version 5 simplemente se visualiza...

Porque?
que hago mal?
probe con el codigo del amigo Cluster...
que esta en....
------------------------------------------------------
www.forosdelweb.com/showthread.php?postid=306781#post306781
------------------------------------------------------
y me da el mismo resultado, solo se visualiza con la version 5 de I.E.... no descarga..
Alguien me puede ayudar?
Alguna acotacion amigo Cluster?
Saludos.....
__________________
________________________________________

Ugho.
  #7 (permalink)  
Antiguo 29/03/2004, 10:09
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Pues la acotación a todo este tema es que no todos los navegadores se comportan igual o interpretan las cabeceras HTTP standars que define el protocolo HTTP/1.1 ... Además "creo"? que el tema de que IE 5 muestre el contenido y no lo envie a descargar pese que se use esas cabeceras parece que era un bug (error) del IE y esa versión .. Pero, no te lo puedo confirmar. PHP ya cumplió su parte .. ahora es cosa de que veas que cabeceras HTTP son las más adecuadas para cada navegador y si corresponde hacer algún tipo de switch() para determinar que navegador está pretendiendo descargar el archivo para enviarle las cabeceras HTTP adecuadas a cada uno (pero antes es necesario hacer las pruebas con dichas cabeceras HTTP uno por uno ..)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 29/03/2004, 10:13
Avatar de Ugho  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 487
Antigüedad: 21 años, 4 meses
Puntos: 0
Bueno amigo Cluster:
Muchas gracias por la acotacion y estudiare mas el tema y si es necesario hare un switch para cada opcion....
Saludos....
__________________
________________________________________

Ugho.
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 12:56.