Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: UNFORMAT en 7 Febrero 2010, 15:54 pm



Título: Ayuda con PHP
Publicado por: UNFORMAT en 7 Febrero 2010, 15:54 pm
Hola muy buenas, antes que nada agradecer a todo el mundo (que conteste o no) pero que gracias a ell@s me he salvado mas de una vez :-)

A lo que voy....
tengo un script de descargas en php y me gustaría añadirle cuando la descarga se llevará con exito un "El archivo ha sido descargado correctamente (o algo así)" el problema es que lo he intentado con echo y print pero con ninguno e podido hacerlo ya que el script da un error.

Código
  1. <?php
  2.  
  3.  
  4.  
  5. $directorio_descarga = './directorio/files'; // dir descarga
  6. $directorio_contador = './directorio/cont'; // dir contador
  7.  
  8.  
  9.  
  10. $ruta = $directorio_descarga.'/'.$HTTP_GET_VARS['id'];
  11.  
  12.  
  13.  
  14. if(file_exists($ruta))
  15.  
  16. {
  17.  
  18.  
  19. $fichero = fopen($directorio_contador.'/'.$HTTP_GET_VARS['id'].'.txt','r+');
  20. $contador = fread($fichero,100);
  21. fclose($fichero);
  22. $contador++;
  23. $fichero = fopen($directorio_contador.'/'.$HTTP_GET_VARS['id'].'.txt','w');
  24. fwrite($fichero, $contador);
  25. fclose($fichero);
  26.  
  27. $tamano = filesize($ruta);
  28.  
  29. header('Content-Type: application/octet-stream');
  30. header('Content-Disposition: attachment; filename='.$HTTP_GET_VARS['id']);
  31.  
  32. header('Content-Length: '.$tamano);
  33.  
  34.  
  35.  
  36. readfile($ruta);
  37.  
  38. }else{
  39.  
  40. echo "<font face=$textfont size=2>";
  41. echo "<center><br><br>El archivo no está disponible en estos momentos<br>";
  42. echo "<b>Intentelo más tarde<b>";
  43. }
  44.  
  45.  
  46. ?>


Lo único que e conseguido es que cuando la url no sea correcta muestre un mensaje, pero me gustaría que lo mostrase cuando a sido satisfactoria. ¿como puedo hacerlo?


Nuevamente muchas gracias y un saludo!


Título: Re: Ayuda con PHP
Publicado por: dark_sargon en 7 Febrero 2010, 19:24 pm
Hola. Un  error que veo por encima:

Línea 6, falta poner comilla al final:
Código
  1. $directorio_contador = './directorio/cont'; // dir contador


Saludos.


Título: Re: Ayuda con PHP
Publicado por: UNFORMAT en 8 Febrero 2010, 10:22 am
Hola dark_sargon, muchas gracias el script original estaba bien pero copie y pegué, cambie los nombres de las rutas  :¬¬ y me comi la comilla jejje

gracias!
¿sabrias como insertar un texto con echo o print si la descarga fue satisfactoria?


Saludos!


Título: Re: Ayuda con PHP
Publicado por: Castg! en 8 Febrero 2010, 18:21 pm
creo qe en php no se puede ya que interactua con el server, y lo que necesitamos en que nos avise el cliente. igualmente no creo que sea posible, habria que interactuar con el navegador, locual no he visto nunca que interactue de esta forma. otra cosa mas que te corrigo, es el filtrado de caracteres en la variable. pensa que si yo pongo ../../../../../../../../etc/passwd me descargaria el fichero depasswords :S, asi que agregate:
Código
  1. function proteger($flota){
  2. if(explode("../",$flota)){
  3. return str_replace("../","",$flota);
  4. }
  5. }
  6. $id=proteger($_GET['id']);

otra cosita, porq no usas $_GET?

suerte ;)!


Título: Re: Ayuda con PHP
Publicado por: jdc en 8 Febrero 2010, 18:50 pm
Te equivocas castg (por alguna razón me gusta decir eso, espero que no te enojes xD )
 
Fíjate que los archivos estarían en ./directorio/files y agrega un / antes del archivo a descargar, por lo tanto no afecta un rfi, quedaría asi...
 
./directorio/files/../../
 
:s xD


Título: Re: Ayuda con PHP
Publicado por: Castg! en 8 Febrero 2010, 18:54 pm
vamos no tengas miedo que no te voy a pegar! xD! todos nos equivocamos :P..


Título: Re: Ayuda con PHP
Publicado por: UNFORMAT en 8 Febrero 2010, 21:07 pm
creo qe en php no se puede ya que interactua con el server, y lo que necesitamos en que nos avise el cliente. igualmente no creo que sea posible, habria que interactuar con el navegador, locual no he visto nunca que interactue de esta forma.
Gracias por tu respuesta! ya me queda todo más claro porque mira que le di vueltas y nada .....  :rolleyes:

Citar
otra cosa mas que te corrigo, es el filtrado de caracteres en la variable. pensa que si yo pongo ../../../../../../../../etc/passwd me descargaria el fichero depasswords :S, asi que agregate:
Código
  1. function proteger($flota){
  2. if(explode("../",$flota)){
  3. return str_replace("../","",$flota);
  4. }
  5. }
  6. $id=proteger($_GET['id']);

al principio lo tenia sin el ./ y vi que se podía armar una buena cierto lo que dice "janito24"
Citar
otra cosita, porq no usas $_GET?
pues si voy a cambiar ya que es un parametro menos global y consumiria menos recursos en el server no?

bueno pues gracias a amb@s!


Título: Re: Ayuda con PHP
Publicado por: Castg! en 8 Febrero 2010, 21:28 pm
yo por mi parte soy bien macho, ahora janito no lo se  :silbar: jejej denada amigo y suerte con tu proyecto ;)