Foros del Web » Programando para Internet » PHP »

ayuda sobre script de descarga de ficheros

Estas en el tema de ayuda sobre script de descarga de ficheros en el foro de PHP en Foros del Web. hola amigos, tengo un problema y no encuentro la solucion... encontre un pequeño script en internet para descargar ficheros: descarga.php Código PHP: <? function  Descargar ...
  #1 (permalink)  
Antiguo 14/05/2004, 01:04
Avatar de puchitol  
Fecha de Ingreso: diciembre-2003
Ubicación: ELCHE
Mensajes: 322
Antigüedad: 20 años, 11 meses
Puntos: 0
ayuda sobre script de descarga de ficheros

hola amigos, tengo un problema y no encuentro la solucion...

encontre un pequeño script en internet para descargar ficheros:

descarga.php
Código PHP:
<?
function Descargar($ElFichero){ 

    
$TheFile basename($ElFichero); 
          
//echo "El Fichero: $TheFile<br>"; // borrar 
    
header"Content-Type: application/octet-stream");  
    
header"Content-Length: ".filesize($ElFichero));  
    
header"Content-Disposition: attachment; filename=".$TheFile."");  
    
readfile($ElFichero);  


$fichero $_REQUEST['fichero'];
Descargar($fichero); 
?>
si se ejecuta directamente, es decir, asi:
http://home/pruebas/descarga.php?fichero=fich.ext
si que lo descarga correctamente. El problema viene cuando hago una pagina con un formulario previo para seleccionar el fichero (o un enlace a descarga.php con el fichero en la URL). Al enviar a la pagina descarga.php, en el cuadro de dialogo que sale para descargar el fichero no me aparece el fichero pedido, si no el fichero de la pagina que contiene el formulario (o el enlace) previo a la descarga...
Espero haberlo explicado bien...
Entonces, alguien sabe cual puede ser el problema?, puede ser que haya que modificar alguna configuracion del apache o del php?

gracias de antemano.

un saludo,
__________________
If you think fuck is funny, fuck yourself and save your money,
espero que entendais la moraleja... je, je, je
  #2 (permalink)  
Antiguo 14/05/2004, 07:12
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
En teoría .. la cabecera HTTP:

header( "Content-Disposition: attachment; filename=".$TheFile."");

define el "nombre" que se presentará en tu cuadro de dialogo para ofrecer el archivo a descargar y el nombre que tendrá al ser descargado (el que ofrecerá).


Se supone también que:

$fichero = $_REQUEST['fichero'];

Toma toda variable que entre por $_GET o $_POST o $_COOKIE .. así que una llamada desde tu formulario por POST sería tomado igual que si lo haces por el URL directo (en GET sería en ese caso).

Podrías hacer algunas pruebas:

Pon en la cabecera mencionada . .un nombre de archivo fijo y tan sólo apunta tu action del formulario a ese script descargar.php como ya lo haces. (y observa)

así vas descartando problemas en la recepción de esa variable del formulario ..

Por cierto .. el nombre del archivo contiene espacios .. comillas.. ?

Sería bueno aplicar en:

$fichero = trim($_REQUEST['fichero']);

Y de ahí .. tal vez algunas cosas más como stripslashes() o similares para evitar problemas.

Otro detalle que tienes que mejorar es la "seguridad" .. Si le pasas por el URL o como sea a ese script un nombre de archivo completo sin ninguna validación .. podría hacer algo tipo:

descargar.php?url=config.php

donde config.php tendrías tus típicas variables de acceso a tus base de datos .. o datos relevantes.

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 15/05/2004, 04:36
Avatar de puchitol  
Fecha de Ingreso: diciembre-2003
Ubicación: ELCHE
Mensajes: 322
Antigüedad: 20 años, 11 meses
Puntos: 0
Hola Cluster, gracias por contestar...

la verdad es que creo que el principal problema que tengo es el de enviar las cabeceras, me explico...

como mucha gente sabe, todos los navegadores no siguen la misma regla a la hora de aceptar las cabeceras, algunas cabeceras se envian de forma diferente dependiendo del tipo de navegador que sea. El problema que tenia en mi primer post era debido a que utilizaba IE5.5, pero luego he probado en IE6 y en Mozilla 1.6 y si que me ha funcionado en la mayoría de los ficheros bajados.
Tal y como esta el script, en Mozilla me baja perfectamente todos los ficheros, y en IE 6 me los baja todos bien menos los pdf, que si que lo baja pero que a la hora de abrirlo con el Adobe Reader me indica un error en el fichero, a que se puede deber este error?, es que no se ha bajado correctamente?
y, por ultimo, como se puede saber que cabeceras usan cada uno de los navegadores?, hay alguna lista en la que aparezcan?
He estado mirando por el foro, y la verdad que no me ha quedado muy claro...

Gracias de antemano...

un saludo
__________________
If you think fuck is funny, fuck yourself and save your money,
espero que entendais la moraleja... je, je, je
  #4 (permalink)  
Antiguo 15/05/2004, 15:04
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Si tienes paciencia .. podrías estudiar el código concreto de descarga de archivos (en ese caso son los que genera la aplicación propiamente) de "phpMyadmin" (www.phpmyadmin.net) .. Es uno de las pocas aplicaciones en PHP que tienen alguna funcionalidad de "descargas" que controla mejor el tema de descargas y compatibilidad .. En su código veras algunas rutinas para identificar el cliente (navegador) conectado y hasta su versión para componer las cabeceras HTTP más adecuadas para cada uno.

Pero .. "teoría" o "compendio" sobre que cabeceras HTTP son las que controla todos los navegadores que hay actualmente en uso .. no lo conozco (si lo encuentras nos avisas). Es un problema que no depende de "PHP" ni de cualquier lenguaje de programación .. sino como bien dices de que ningún navegador sigue los standars que en su tiempo definió el protocolo HTTP en sus RFC's correspondientes.

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 15/05/2004, 15:21
Avatar de Gerald  
Fecha de Ingreso: julio-2003
Mensajes: 1.356
Antigüedad: 21 años, 4 meses
Puntos: 2
Sino revisa el manual

http://www.php.net/header

Revisa los ejemplos dejados por los usuarios
__________________
Solo por Hoy: Trataré de fortalecer mi mente. Estudiaré y aprenderé algo útil
Hoteldipity
Arte Caracol
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 22:21.