Comunidad de diseño web y desarrollo en internet online

Ocultar ruta de descarga de un archivo en php

Citar            
MensajeEscrito el 07 Abr 2011 12:40 pm
Hola, he estado buscando mucho por la red pero no encuentro nada que funcione para que cuando pulse un link y se abra la ventanita de descarga para bajar un archivo, no se muestre el nombre del servidor en el que esta dicho archivo.

Espero que podais ayudarme. Estoy desesperada. He probado un monton de scripts pero ninguno consigue lo que necesito.

Espero vuestras respuestas, si puede ser, lo antes posible. Lo necesito con urgencia....

Gracias a todos.
Un saludo.

Por liru28

53 de clabLevel



 

msie8
Citar            
MensajeEscrito el 07 Abr 2011 04:20 pm
eso es imposible almenos qu quieras gastar el ancho de banda de tu hosting ya que al final se peude obtener de que host se descargo almenos que crees un puente entre el archivo y el cliente pero ese puente tiene el costo que es tu ancho de banda es como descargar de tu hosting no recomendado

Por tuadmin

Claber

598 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 07 Abr 2011 04:26 pm
Podrias utilizar flash. Hace mucho tiempo hice algo asi para guardar (y mostrar) el numero de descargas.

Por Acreonte

Claber

1543 de clabLevel

5 tutoriales
6 articulos

Genero:Masculino  

Digital Scientist

firefox
Citar            
MensajeEscrito el 08 Abr 2011 11:19 am
En realidad no es imposible como @tuadmin, solo que añaden mas conexiones a la BD de forma "innecesaria".

Crea un archivo llamado descargas.php (o como prefieras), no le pongas cabeceras, ni nada, totalmente en blanco.
Include tu archivo de conexión a la base de datos.
Haz un query para tomar la URL de tu descarga, la id de esa descarga llegará por GET.
Iguala la url de la descarga a una variable (opcional) por ejemplo $url

Escribe: header("locacion: $url") o header("locacion: ".$url."") -- No recuerdo si lo admitía directamente así hace años que no uso PHP, pero creo que sí.

Reemplaza el link de descarga, en vez de tomar la URL para descargar directamente, que apunte a esta nueva pagina pasando la ID por GET. Ej:
<a href="descargas.php?id=<? echo $id?>">Descargar!</a>

Si no te funciona por que te dice que ya se enviaron las cabeceras, prueba a añadirle en descargas.php: ob_start()

Saludos

Por neisserian89

65 de clabLevel



 

firefox
Citar            
MensajeEscrito el 11 Abr 2011 09:38 am
Hola, muchisimas gracias por vuestras respuestas.

Al final lo he conseguido llamando a un php desde el flash. El codigo que he usado es el siguiente:

<?
$ruta = $_GET['id'];
$archivo_arr = explode( "/", $ruta );
$archivo = $archivo_arr[count($archivo_arr) - 1];

header( "Content-Disposition: attachment; filename=".$archivo."");
header( "Content-type: application/octet-stream" );
header("Pragma: public");

header("Content-Length: ".filesize($ruta)); //header que envia al navegador el tamaño del archivo.

@readfile( $ruta );
?>

Pero existe un inconveniente: funciona en todos los navegadores excepto en internet explorer. En este ultimo, sale la ventana para iniciar la descarga pero no se descarga el fichero.
Me podrias ayudar??

Por liru28

53 de clabLevel



 

msie8
Citar            
MensajeEscrito el 12 Abr 2011 09:32 am
Hola, ante todo os agradezco un monton vuestras respuestas, voy avanzando en el tema pero no lo consigo al 100%

Con el siguiente codigo he conseguido que vaya la descarga tambien en Internet Explorer (en el resto de los navegadores no hay problema),

$id=$_GET['arc'];
$archivo=basename($id);

if (strstr($_SERVER['HTTP_USER_AGENT'], 'MSIE')) {
$sDocumento = $id;
$buffer = file_get_contents($sDocumento);
header ("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header ("Content-Type: application/octet-stream");
header ("Content-Length: " . strlen($buffer));
header ("Content-Disposition: attachment; filename=".$archivo."");
echo $buffer;

} else {
header("Content-type: application/octet-stream");
header( "Content-Disposition: attachment; filename=".$archivo."");
header("Content-Length: ".filesize($id));
@readfile( $id );
}


El problema ahora es que tengo una lista de videos para descargar y algunos van bien y se descargan y otros no van (me dice que el archivo no se encuentra despues de estar un rato buscando). Sin embargo, la descarga de estos videos que en Internet Explorer no funciona en cualquier otro navegador va estupendamente, por lo que descarto que sea problema de los videos.

Sabeis por que puede ser esto??? Otra cosa que he notado es que en Internet Explorer la ventanita de la descarga puede llegar a tardar en salir hasta 10 o 12 segundos.

Espero que podais ayudarme.
Muchas gracias.
Saludos.

Por liru28

53 de clabLevel



 

msie8
Citar            
MensajeEscrito el 13 Abr 2011 11:49 am
Hola, ya he encontrado la solución. Os la pongo aqui por si a alguien le pasa:

Como os comente antes, la descarga en Internet Explorer se iniciaba en algunos videos mientras que en otros daba error. Esto era porque el limite de memoria en php estaba limitado a 100M. Lo he solucionado poniendo en un archivo .htaccess lo siguiente:

php_value memory_limit 400M

Gracias a todos.
Saludos.

Por liru28

53 de clabLevel



 

msie8
Citar            
MensajeEscrito el 13 Abr 2011 07:48 pm
Gracias a ti por ofrecernos otra solución.

Suerte y hasta otra

Por neisserian89

65 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.