Foros del Web » Programando para Internet » PHP »

¿cual es el mejor metodo para forzar una descarga de archivo de audio sin problemas?

Estas en el tema de ¿cual es el mejor metodo para forzar una descarga de archivo de audio sin problemas? en el foro de PHP en Foros del Web. Hola, A ver si me explico... En mi web hay archivos de audio (mp3) y si pulsas los archivos se descargan normalmente... pero hay gente ...
  #1 (permalink)  
Antiguo 07/12/2005, 06:52
MindPaniC
Invitado
 
Mensajes: n/a
Puntos:
¿cual es el mejor metodo para forzar una descarga de archivo de audio sin problemas?

Hola,

A ver si me explico...

En mi web hay archivos de audio (mp3) y si pulsas los archivos se descargan normalmente... pero hay gente que debe de tener el quicktime o similares que lo que hacen es que al intentar descargar cualquiera de los archivos de audio lo que ocurre es que no se descargan sino que se reproducen online con el susodicho quicktime o similares.

Si le dan al boton derecho y eligen guardar destino... consiguen descargar el archivo pero el archivo baja con el nombre de Descargar.php que es el script qeu tengo para realizar las descargas... y actualizar el contador de descargas de la base de datos.

este es el script que utilizo:
Código PHP:
<?php 
$conexion 
mysql_connect("localhost","xxxxxxxxxxxx","xxxxxxxxxxxxxx"); 
mysql_select_db("xxxxxxxxxxxxx"$conexion) OR die("No se puede establecer la conexión a MySQL"); 
if(
is_numeric($_GET['id'])) { 
// Solo actualizar contador si $id es numerico 
$sql mysql_query("update sets set setclics=setclics+1 where setid='".$_GET['id']."'");     

header("Location: ".urldecode($_GET['link'])); 
?>
Como veis simplemente añade +1 a el campo "setclics" y luego hace el GET['id'] es decir baja el archivo que tenga una determinada id.

En principio me gustaria poder cambiar el sistema y a ser posible conseguir uno mas sofisticado y actual... que no de problemas.

saludos
  #2 (permalink)  
Antiguo 20/01/2006, 22:31
Avatar de Developmex  
Fecha de Ingreso: julio-2004
Mensajes: 33
Antigüedad: 19 años, 9 meses
Puntos: 0
Hola Hermano, yo tenia el mismo problema con diversos tipos de formatos de archivos, todos me los abría en el navegador y realmente noe ra funcional, aquí te dejo un codigo que te puede servir, esto se soluciona añadiendo cabeceras MIME en tu codigo PHP.

Aquí te dejo el ejemplo que me permitio forzar la descarga saludos:

if(isset($_GET['id'])) {
//Con este dato definimos en que tabla se va a hacer el SELECT para mostrar el archivo de Usuario en cuestion . . .
$_GET['categoria'];
$categoria = $_GET['categoria'];

$conexion=mysql_connect("localhost","usuario","pas sword") or die ("no se ha podido conectar a la BD");

mysql_select_db("nombre_de_la_base_de_datos") or die ("no se ha podido seleccionar la BD");

$sql = "SELECT binario_contenido,binario_tipo,binario_nombre FROM $categoria WHERE id='".$_GET['id']."'";

$consulta = mysql_query($sql,$conexion);

$datos = mysql_result($consulta,0,"binario_contenido");
$tipo = mysql_result($consulta,0,"binario_tipo");
$nombre = mysql_result($consulta,0,"binario_nombre");
///////////Estas son las cabeceras//////////////////////
header("Content-type: $tipo");
header("Content-Disposition: attachment; filename=$nombre");


echo $datos;



}





Saludos

Última edición por Developmex; 31/01/2006 a las 00:59
  #3 (permalink)  
Antiguo 30/01/2006, 10:16
MindPaniC
Invitado
 
Mensajes: n/a
Puntos:
mmm he probado de varias maneras pero al hacer click con el boton derecho y elegir guardar como me sale automaticamente el nombre del archivo que contiene el script, es decir "descargar.php"... y luego en realidad es el archivo de audio,

se supone que deberia de poder reconocer el nombre del archivo o el titulo que esta almacenado en la base de datos pero no se como hacer para conseguirlo y asi evitar los problemas que ocurren..

en definitiva, quiero que no se repoduzcan online los archivos mp3 y que se fuerzen las descargas y que si alguien hace click con el boton derecho y elige guardar como... no le salga el archivo con el nombre "descargar.php"

saludos
  #4 (permalink)  
Antiguo 30/01/2006, 10:25
Avatar de dopon  
Fecha de Ingreso: julio-2005
Ubicación: Cucuta / Colombia
Mensajes: 493
Antigüedad: 18 años, 9 meses
Puntos: 1
Amigo mira si tu le das click derecho a un archivo llamado XXX.ytr el navegador Obviamente va a reconocer el destino a guardar como XXX.ytr porque el no sabe que habra en el otro lado no sabe que XXX.ytr lo que haces es mandar una cabecera con un archivo
  #5 (permalink)  
Antiguo 30/01/2006, 10:36
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Hay unos post anteriores en que se ha tratado el tema con bastante profundidad, te dejo 2:

http://www.forosdelweb.com/showthrea...force+download

http://www.forosdelweb.com/showthrea...force+download
  #6 (permalink)  
Antiguo 30/01/2006, 10:56
MindPaniC
Invitado
 
Mensajes: n/a
Puntos:
mmmmm he leido el tema... la cuestion al parecer son las cabeceras...

la verdad es que no tengo ni idea del tema.... a ver si consigo hacer algo...
  #7 (permalink)  
Antiguo 31/01/2006, 00:58
Avatar de Developmex  
Fecha de Ingreso: julio-2004
Mensajes: 33
Antigüedad: 19 años, 9 meses
Puntos: 0
De acuerdo Hola hermano

Mira a mi me sucedio lo mismo con el ejemploq ue teacabod e mandar, al darle guardar a un archivo me aparecia la ventana de guardar con el nombre del archivo .php, esto es algo bien facild e solucionar, mira,te lo explico mas detallado:


/**Primero establecemos la conexion con la abse de datos y usamos or die("cualquier mensaje") esto con la finalidad de testear(debuggear) nuestro programita y detectar errores. . .**/

$conexion=mysql_connect("localhost","usuario","pas sword") or die ("no se ha podido conectar a la BD");

/**Ahora seleccionamos la base de datos a la que nos queremos conectar **/
mysql_select_db("nombre_de_la_base") or die ("no se ha podido seleccionar la BD");


/**Asignamos a una variable $sql una cadena que contiene el query que nos traiga los datos que necesitamos de la base de datos**/

$sql = "SELECT binario_contenido,binario_tipo,binario_nombre FROM $categoria WHERE id='".$_GET['id']."'";


/**Ejecutamos la consulta**/
$consulta = mysql_query($sql,$conexion);


/**Ahora hacemos un barrido de los datos que ya trajo nuestro query y los mostramos en pantalla, asigandole a cada campo una variable **/
//Este barrido trae los datos que contiene el campo binario_contenido
$datos = mysql_result($consulta,0,"binario_contenido");

//Este barrido trae los datos que contiene el campo binario_tipo
$tipo = mysql_result($consulta,0,"binario_tipo");

/**Este barrido trae los datos que contiene el campo binario_nombre ,"OJO", este dato es el que nos permitira darle el nombre que contiene en la base de datos el archivo binarioq ue estamos descargando **/

$nombre = mysql_result($consulta,0,"binario_nombre");



/**Esta cabecera forzara la descarga para indicarle al navegador que debe hacer, si abrirlo en el navegador o mandar la ventanita de guardar como**/
header("Content-type: $tipo");

/**Estas son las cabeceras MIME y nos ayudaran a darle el nombre real que contiene el registro en la abse de datos a cada archivo insertado**/
header("Content-Disposition: attachment; filename=$nombre");


/**Por ultimo imprimimos los datos**/
echo $datos;

Ojala te sirva, ya estas muy cerca no esta tan complicado, salu2
  #8 (permalink)  
Antiguo 31/01/2006, 10:24
 
Fecha de Ingreso: julio-2003
Ubicación: Buenos Aires
Mensajes: 96
Antigüedad: 20 años, 9 meses
Puntos: 0
otra manera:

$archivo = 'algo.pdf';
$ruta = './proyectos/'.$archivo;
header('Content-type: application/download');
header('Content-Disposition: attachment; filename="'.$archivo."');
readfile($ruta);
  #9 (permalink)  
Antiguo 01/02/2006, 07:37
MindPaniC
Invitado
 
Mensajes: n/a
Puntos:
mmm tengo que investigarlo.. es que no es una simple descarga.. sino descargas que dependen de una base de datos, ya que los datos de los "items" que se descargan y las estadisticas de descarga estan en una base de datos.

saludos
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 12:08.