Foros del Web » Programando para Internet » PHP »

Iniciar una descarga....

Estas en el tema de Iniciar una descarga.... en el foro de PHP en Foros del Web. Muy buenas, continuo este post que empecé en seguridad y redes: http://www.forosdelweb.com/showthrea...hreadid=111170 Mi pregunta es, ¿cómo puedo mediante PHP iniciar una descarga normal y corriente? ...
  #1 (permalink)  
Antiguo 12/02/2003, 11:52
Avatar de zarate  
Fecha de Ingreso: septiembre-2001
Ubicación: Madrid
Mensajes: 164
Antigüedad: 22 años, 7 meses
Puntos: 0
Iniciar una descarga....

Muy buenas, continuo este post que empecé en seguridad y redes:

http://www.forosdelweb.com/showthrea...hreadid=111170

Mi pregunta es, ¿cómo puedo mediante PHP iniciar una descarga normal y corriente?

He revisado un post de descargas de este foro pero no encontré la solución completa, también he buscado en las FAQ's el post de descargas con "resume", pero hasta que lo descifre (si lo hago) me puede dar el 2004.

Creo que mandando algún tipo de cabecera que indique el tipo de archivo a descargar sería sufiente, ¿no?

Bueno, muchas gracias
__________________
Zárate
  #2 (permalink)  
Antiguo 12/02/2003, 12:15
Avatar de CHILENOCES  
Fecha de Ingreso: octubre-2001
Ubicación: Mmm paseando por la vida
Mensajes: 491
Antigüedad: 22 años, 6 meses
Puntos: 0
Yo he hecho algo asi para mi pagina pero necesito saber si lo que necesitas seria algo como por ejemplo descarga.php?id=5 y asi ese descarga.php llamara el id 5 que tenga una url por ejemplo www.descarga.com y luego se pusiera automatico con un header.location.

Si es asi respondeme.
__________________
ChilenoCesar Looking for something new...
  #3 (permalink)  
Antiguo 12/02/2003, 12:17
 
Fecha de Ingreso: octubre-2000
Mensajes: 1.692
Antigüedad: 23 años, 6 meses
Puntos: 19
No se si es lo que buscas, espero te sirva.


<?php
/************************************************** *****************
* download.php
*
* This PHP script sends a file in such a way that most web clients
* will offer to download the file to the client computer. It uses
* the Content-Disposition headeer extension to RFC2616
* (see http://www.w3.org/Protocols/rfc2616/rfc2616.html)
* to suggest the web client should download the file. This is
* implemented on most (but not all) web clients. I have tested it
* on Mozilla, Netscape 4.78 and 6.21, Internet Explorer 5.5, lynx,
* Konqueror and Opera. It works fully on all.
*
* Usage: download.php?filename=name_of_file.extension
*
* Examples: to download the SPSS file data.sav from index.html
* where download.php, index.html and data.sav are all in the
* same directory, put a link in index.html of the form
* <a href="download.php?data.sav">Download SPSS data file</a>.
* You can use paths in the filename, as in
* <a href="download.php?../include/data.sav">Download data</a>.
*
* You can specialise the code by putting a line of the form
* $filename="data.sav";
* immediately after this comment. This will allow you to send
* exactly one file for download, viz data.sav.
*
* Only one variable, $filename, is not defined by default. In
* principle, you can send a the name of the file to download
* through a POST request (e.g. on a form button). I haven't
* tested this.
*
* Restrictions: by default you can't download files with the
* extensions html, phtml, htm, phtm, inc, php or php3. This is to
* avoid potential security problems. For example, it is possible
* to use a PHP file to hide sensitive data such as the password
* to connect to an SQL server. If we allowed this script to offer
* php scripts for download, then a client request of the form
* http://../download.php?sensitive.php could show the raw php file.
*
* Security issues: see the comments under Restrictions above. If
* in doubt, define $filename immediately after this comment and
* use a separate script for each downloadable file. I've tried
* using header( "Location: ... " ) to retrieve the file. It doesn't
* work on a solaris server, but does work on gnu/linux.
************************************************** *****************/
$shortname = basename( $filename );
if( file_exists( $filename ) // sanity check
&& !eregi( "p?html?", $filename ) // security check
&& !eregi( "inc", $filename )
&& !eregi( "php3?", $filename ) ){
$size = filesize( $filename );
header("Content-Type: application/save");
header("Content-Length: $size");
header("Content-Disposition: attachment; filename=$shortname");
header("Content-Transfer-Encoding: binary");
$fh = fopen("$filename", "r");
fpassthru($fh);
exit;
} else {
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD 4.01 Transitional//EN"
"http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Download error</title>
<style type="text/css">
<!--
body {background-image:url(include/background.gif);
font-family:helvetica,arial,sans-serif}
a:hover {text-decoration:none; border-width:thin; border-style:dotted;
background-color:#f2f2ff; color:#000000}
a:focus {text-decoration:none; background-color:#dadae6; color:#000000}
a:active {text-decoration:none; background-color:#ffffff; color:#000000}
-->
</style>
</head>
<body>
<h1>File <?php print( $basename ) ?> not available</h1>
<p>
Either the file you requested does not exist or you are not permitted to
download it using this page.
</p>
</body>
</html>
<?php
}
?>
__________________
PD: Con amor, fe, amor a Dios y amistad podemos hacer un mundo mejor!!!!
  #4 (permalink)  
Antiguo 12/02/2003, 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
Y no te sobra un simple link?

<a href="cosa.zip">descargar cosa.zip</a>

el Cosa.zip es el archivo q vas a descargar .. Si el archivo es algun formato MIME q interprete el navegador .. en vez de descargarlo lo veras en tu navegador (ejemplos .. un .gif .. .jpg .. .txt y dependiedno de otros factores veras los .pdf .. .doc .. etc)

Si alguno de los archivos q vas a ofrecer para descargar es de las extensiones mencionadas o tu navegador en vez de descargarlo lo visualiza .. tendras q usar los scripts q se mencionan donde los has visto .. Con eso se le "cambian" las cabeceras HTTP y se le dice (o mejor dicho se le fuerza) al navegador q q interprete lo q se le va a enviar como un archivo a descargar (para eso estan los content-type del protocoolo MIME y HTTP/1.1 q indican q cabecera envias ..)

Un saludo,
  #5 (permalink)  
Antiguo 13/02/2003, 03:56
Avatar de zarate  
Fecha de Ingreso: septiembre-2001
Ubicación: Madrid
Mensajes: 164
Antigüedad: 22 años, 7 meses
Puntos: 0
Bueno....

Chilonoces: si es así realmente, mi idea es que todas las descargas del sitio se hagan mediante un pop-up al que se le pasa la referencia del archivo a bajar.

Trulala: eso que me mandas tiene muy buena pinta y es en lo que me voy a centrar. Muchas gracias!!!

Cluster: Sí un link funcionaría a la perfección, el tema está en que las descargas deben ser sólo disponibles a usuarios restringidos, y no quiero que alguien copie y pegue y se lo envíe a todos sus amigos.

Lo "más seguro" que ahora mismo puedo hacer es:

- Poner los archivos (PDF's), fuera del directorio HTML.

- Mediante PHP, que como es lenguaje de servidor puede hurgar fuera del directorio HTML, iniciar esas descargas.... bueno, ya os contaré qué tal.

Muchas gracias a todos
__________________
Zárate
  #6 (permalink)  
Antiguo 13/02/2003, 05:37
Avatar de zarate  
Fecha de Ingreso: septiembre-2001
Ubicación: Madrid
Mensajes: 164
Antigüedad: 22 años, 7 meses
Puntos: 0
Bueno, pues después de unas pruebas y unos pequeños cambios, el script que nos brindó trulala funciona bastante bien.

Puedo sacar los archivos que quiero que sean seguros fuera del directorio HTML, y sólo a los usuarios registrados iniciarles las descargas mediante PHP.

Supongo que gente experta podrá saltarse estos sistemas, pero realmente no son mi público objetivo y tampoco mi información es de seguridad nacional... Así qué me quedo aquí.

Sólamente una pregunta, cuando inicia la descarga, el Netscape (N7), le añade al nombre del archivo la extensión .php, es decir, si el nombre del archivo es hola.zip, cuando inicia la descarga lo convierte a hola.zip.php.... Realmente el archivo sigue siendo un zip, y si lo renombras una vez guardado no hay problema, pero es un poco engorroso para el usuario... ¿alguien tiene alguna idea?

Thanx!!
__________________
Zárate
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 10:52.