Foros del Web » Programando para Internet » PHP »

descargas con php

Estas en el tema de descargas con php en el foro de PHP en Foros del Web. Saludos amigos el problema que tengo es el siguiente: tengo una web que va a permitir la descarga de documentos .doc y .pdf pero no ...
  #1 (permalink)  
Antiguo 10/02/2003, 20:52
Avatar de fperezv  
Fecha de Ingreso: enero-2003
Mensajes: 36
Antigüedad: 21 años, 2 meses
Puntos: 0
descargas con php

Saludos amigos el problema que tengo es el siguiente: tengo una web que va a permitir la descarga de documentos .doc y .pdf pero no deseo que se abran con el programa asociado sino que solo se descargen, me han dicho que podría hacerlo zipeando los archivos, pero la gente que hara los documentos no creo que lo haga, por lo que desearía saber si se puede hacer algo así en php, he visto algo en la red, pero la verdad no se como funcionan y recien comeinzo en php.
De antemano gracias
  #2 (permalink)  
Antiguo 10/02/2003, 22:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues lo q tines q hacer en este caso es manejar las cabeceras HTTP correspondientes al content-type y otras .. Las cabeceras con PHP las lanzas via la funcion header() ..

Yo uso estas:
En $fichero incas la ruta absoluta del archivo (path y archivo.tal)

Código PHP:
<?php 
$nombre_fichero
=basename($fichero);

if (
strstr($_SERVER['HTTP_USER_AGENT'], 'compatible; MSIE ') !== false &&
       
strstr($_SERVER['HTTP_USER_AGENT'], 'Opera') === false) {
      
// IE doesn't properly download attachments.  This should work
      // pretty well for IE 5.5 SP 1
      
header("Content-Disposition: inline; filename=\"$nombre_fichero\"");
      
header("Content-Type: application/octetstream; name=\"$nombre_fichero\"");
      
header("Content-length:".(string)(filesize("$fichero")));
   } else {
      
// Use standard headers for Netscape, Opera, etc.
      
header("Content-Disposition: attachment; filename=\"$nombre_fichero\"");
      
header("Content-Type: application/octetstream; name=\"$nombre_fichero\"");
      
header("Content-length: ".(string)(filesize("$fichero")));

   }

  
readfile("$fichero");
?>
Antes de este código no puede existir naa de HTML (ni en echo "algo" ... o print "algo") . .pues sino te dará problemas de headers enviados bla bla bla ...

En el código se identifica mas o menos el navegador q usa el cliente para enviarle las cabeceras peculiares q acepta cada uno ... (inline y el attachment ..)

En las FAQ's de PHP de este foro (última página) tienes otro ejemplo mas completo q este .. Con cabeceras HTTP extra para darle la funcionalidad de "resume" a tus descargas ..


Un saludo,

Última edición por Cluster; 10/02/2003 a las 22:21
  #3 (permalink)  
Antiguo 11/02/2003, 07:18
Avatar de fperezv  
Fecha de Ingreso: enero-2003
Mensajes: 36
Antigüedad: 21 años, 2 meses
Puntos: 0
Gracias

Gracias Cluster, es decir puedo tomar el nombre del archivo de una lista lo envio a traves de un form, y lo toma este script que enviaste, luego este lo procesa y lo permite bajar.

Voy a comenzar a estudiarlo y te cuento.

Gracias de nuevo.
  #4 (permalink)  
Antiguo 27/12/2003, 12:58
 
Fecha de Ingreso: septiembre-2003
Mensajes: 48
Antigüedad: 20 años, 7 meses
Puntos: 0
ESTARÁ MUY BIEN CON EL IE 5.5, PERO CON EL IE 6 COMO SI NO EXISTIERA EL CÓDIGO, ES DECIR, EL DOCUMENTO .TXT SE ABRE CON EL NOTEPAD Y NO SALE LA VENTANA DE DESCARGAR A DISCO DURO CLIENTE.
  #5 (permalink)  
Antiguo 27/12/2003, 18:14
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
marylin77

OK, .. pero eso ya se avisó y no es problema de PHP sino de los desarrolladores de Navegadores que no se ponen deacuerdo con seguir los standares de las cabeceras HTTP.

Así que si encuentras las cabeceras HTTP adecuadas para IE6 .. mejoraremos el código.

Un saludo,

PD: No hace falta que escribas en mayusculas .. parece que estés gritando!!!.
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 03/01/2004, 13:06
 
Fecha de Ingreso: septiembre-2003
Mensajes: 48
Antigüedad: 20 años, 7 meses
Puntos: 0
A mí se me descargan las cosas con 0 bytes, es decir, vacías...por qué puede ser?
El código es este:
Código PHP:
PHP:

function 
descargas(){ 
$practica=$_REQUEST[fichero];//$practica=mytable.txt 
//echo "$practica"; 

$fichero="/NUKE67/$_SESSION[carrera]/$_SESSION[nombrea]/$_SESSION[nombre]"." "."$_SESSION[apellidos]/$practica"
//echo "$fichero"; 
//$fichero=/NUKE67/Ingeniería Automática/Control II/María Sánchez/mytable.txt 
//the path exists 
$nombre_fichero=basename($fichero); 
//$nombre_fichero=mytable.txt 
//echo "<br>$nombre_fichero"; 
if ((strstr($_SERVER['HTTP_USER_AGENT'], 'compatible; MSIE ') !== false )&& (strstr($_SERVER['HTTP_USER_AGENT'], 'Opera') === false)) 

      
// IE doesn't properly download attachments.  This should work 
      // pretty well for IE 5.5 SP 1 

      
header("Content-Disposition: inline; filename=\"$nombre_fichero\""); 
      
header("Content-Type: application/octetstream; name=\"$nombre_fichero\""); 
      
header("Content-length:".(string)(filesize("$fichero"))); 
   } else { 
      
// Use standard headers for Netscape, Opera, etc. 
      
header("Content-Disposition: attachment; filename=\"$nombre_fichero\""); 
      
header("Content-Type: application/octetstream; name=\"$nombre_fichero\""); 
      
header("Content-length: ".(string)(filesize("$fichero"))); 

   } 

  
readfile("$fichero"); 



return; 


  #7 (permalink)  
Antiguo 04/01/2004, 07:22
 
Fecha de Ingreso: septiembre-2003
Mensajes: 48
Antigüedad: 20 años, 7 meses
Puntos: 0
alguna respuesta?
GRacias por adelantado.
  #8 (permalink)  
Antiguo 04/01/2004, 07:39
 
Fecha de Ingreso: septiembre-2003
Mensajes: 48
Antigüedad: 20 años, 7 meses
Puntos: 0
http://bugs.php.net/bug.php?id=13601
  #9 (permalink)  
Antiguo 05/01/2004, 07:17
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
OK
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 17:36.