Foros del Web » Programando para Internet » PHP »

Descarga en php

Estas en el tema de Descarga en php en el foro de PHP en Foros del Web. Hola desde Chile, despues del 18 ¡¡Puta que Estuvo WENO!! tengo el siguiente codigo nombre del programa= DESCARGA.PHP <? $url=$_GET['url']; -->recibo la url completa $archivo=$_GET['archivo']; ...
  #1 (permalink)  
Antiguo 20/09/2006, 11:16
 
Fecha de Ingreso: septiembre-2003
Mensajes: 265
Antigüedad: 20 años, 6 meses
Puntos: 1
Descarga en php

Hola desde Chile, despues del 18 ¡¡Puta que Estuvo WENO!!

tengo el siguiente codigo

nombre del programa= DESCARGA.PHP

<?
$url=$_GET['url']; -->recibo la url completa
$archivo=$_GET['archivo']; --> recibo el nombre del archivo con el cual se subio por el administrador (ej: 12_gt.pdf)
$nombre=$_GET['nombre']; ----> nombre con el cual quiero se guarde

if (file_exists ($url))
{
if($nombre)
$nom_aux=$nombre;
else
$nom_aux="Descarga";

$extension = explode(".",$archivo);

$final =$nom_aux.".".$extension[1];


header("Content-Type: application/octet-stream");
header("Content-Length: ".filesize($url));
header("Content-Disposition: attachment; filename=".$final);

readfile($url);



}
?>


mi problema es el siguiente:

el codigo para forzar la descraga funciona correctamnete me baja el archivo y lo puedo abrir sin ningun problema, hasta aqui bien, pero al momneto de hacer la descarga cuando me sale la ventanita y me pregunta si deseo abrir, guardar, o cancelar, presiono abrir me hace la descraga pero al momento de abrirse me dice que el archivo no se puede abrir ya que viene dañado.

pero hice la prueba en "opera", y aqui funciana correcatmente, sin ningun problema......................


¿Que Puede ser ya que esto me tiene de Cabeza, y no se me ocurre nada?

Última edición por bisteck; 20/09/2006 a las 11:52
  #2 (permalink)  
Antiguo 20/09/2006, 12:21
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Lamentablemente estás sufriendo el NO cumplimiento de los standares por parte de los navegadores que has probado ..

Las cabeceras HTTP que usas como_
Content-Type: application/octet-stream

Son las que definen el tipo de archivo que envias .. No todos se pueden comportar igual y tampoco sirve de mucho que te diga que te "leas" el protocolo HTTP .. por qué si no las cumplen ellos (los "clientes": navegadores) poco podemos hacer al respecto más que "investigar" como trabaja este tema particular cada navegador (y en consecuencia luego poder determinar el navegador o cliente mejor dicho conectado para entregarle las cabeceras HTTP adecuadas).

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 20/09/2006, 12:44
 
Fecha de Ingreso: septiembre-2003
Mensajes: 265
Antigüedad: 20 años, 6 meses
Puntos: 1
Entonces no se puede hacer nada................pero me salta una duda ya que este mismo codigo que tengo lo ocupe en otra parte pero funciana sin ningun problema
  #4 (permalink)  
Antiguo 20/09/2006, 12:59
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por bisteck Ver Mensaje
Entonces no se puede hacer nada................pero me salta una duda ya que este mismo codigo que tengo lo ocupe en otra parte pero funciana sin ningun problema
Con el mismo navegador? .. con el mismo tipo de archivo? .. Si haces pruebas, intenta que sean en las mismas condiciones de pruebas.

Bueno .. yo uso estas cabeceras .. van bien con IE 6.x .. no así para IE 5.5 (parece que ese es un caso "especial" como trabaja las cabeceras HTTP). Otros navegadores no he probado (lo uso principalmente en una Intranet donde tengo claro que máquinas uso y que soft usan).

Código PHP:
switch ($_GET['accion']){
    case 
"bajar":
        
$content_disposition="attachment";
    break;
    case 
"ver":
        
$content_disposition="inline";
    break;
    default:
        
$content_disposition="attachment";

}

header("Content-Type: ".$tipo_mime_archivo); 
header("Content-Disposition: ".$content_disposition."; filename=\"".trim($filename)."\"");  
header("Accept-Ranges: bytes");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($archivo_ruta));

readfile($archivo_ruta); 
Bueno .. lo que uso en definitiva es:

1) Defino el "conten-type" según el formato MIME del archivo. (en mi caso eso lo tengo ya claro pues al subir el archivo alaceno ese dato en mis BBDD). Esto es necesario sobre todo si pretendes hacer un "inline".

2) Defino "attachment" o "inline" según quiera bajar el archivo o verlo en línea para el "content-disposition".

El resto son "opcionales" .. pero en algún sitio ví que la usaban así que las usé.

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 20/09/2006, 18:03
 
Fecha de Ingreso: septiembre-2003
Mensajes: 265
Antigüedad: 20 años, 6 meses
Puntos: 1
Cita:
Iniciado por Cluster Ver Mensaje
Con el mismo navegador? .. con el mismo tipo de archivo? .. Si haces pruebas, intenta que sean en las mismas condiciones de pruebas.....
probe el codigo

y el error que me manda es:Error al abrir el documento. el archivo no se encuentra.

pero al hacer click en abrir, este lo baja, bueno se ve los bytes que empieza a descargar

NO ENTIENDO!!!
  #6 (permalink)  
Antiguo 20/09/2006, 18:50
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por bisteck Ver Mensaje
probe el codigo

y el error que me manda es:Error al abrir el documento. el archivo no se encuentra.

pero al hacer click en abrir, este lo baja, bueno se ve los bytes que empieza a descargar

NO ENTIENDO!!!
El código que te presenté es exactamente igual al tuyo sólo que añade más cabeceras .. Respeta las variables tuyas .. pero en el fondo son las mismas y/o equivalentes.

Un saludo,
__________________
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 20:27.