descargar un archivo y no abrirlo

ItNaS

Este link por ejemplo http://downloads.skate.online.ea.com/Content/xbl2/SKATE-2008/Videos/01316/859821348/JNU-MwAAAADXR39VAwN8AA.flv
Quiero que al clicar en el empieze una descarga no que me lo abra saliendo esa cosa fea. Como puedo hacerlo?
Gracias de antemano.

BlisZ

has probado click derecho -> guardar como ?

SeiYa

Lo que el quiere es una forma de incluir un enlace a ese archivo y que la gente se lo baje de manera automática.

Y

con este código puedes hacerlo

<?php
$filename='/path/al/archivo'
$mime = mime_content_type($filename);
header("Content-Type: $mime");
$len = filesize($filename);
header("Content-Length: $len");
header("Content-Disposition: attachment;
filename=\"$nombrearchivo\"");
readfile($filename);
?>

El primer header es para indicar el tipo mime que vas a enviar, el segundo el tamaño que va a ser la descarga (así el navegador sabrá como calcular la barra de progreso en al descarga, por ejemplo) y por último, que no se abra, sino se descargue (eso es el attachment).

De esta manera se descargará el archivo y se evitará que los navegadores utilicen algún tipo de método para abrirlo (sea por plugin o por edición)

ItNaS

#4 pero con eso no se me abre automáticamente? Yo quiero lo que dice Seiya, que al clickar se descargue. No que se abra.

#2 lo de boton derecho ya lo se pero mucha gente no y no sabe que hacer cuando le aprece eso.

Edito, me sale que la funcion mime_content_type() esta indefinida :S

Y

#5 vuélvete a leer los dos últimos párrafos, creo que son claros.

Si te dice que la función no está definida puede ser porque no hayas indicado correctamente la ubicación del archivo o porque no hayas indicado en el php.ini donde se encuentra ubicado el archivo magic.mime (que es muy extraño que no esté indicada).

Ojeate la documentación de php sobre los mimetype:

http://www.php.net/manual/es/ref.mime-magic.php

de todas formas, eso es solo para indicar el tipo mime, si ya sabes cual es (por ejemplo, un xml sería text/xml) lo indicas en el header y listo.

ItNaS

si es un flv, q pongo? video/flv?

Y

http://www.google.com/search?q=mime+flv&ie=utf-8&oe=utf-8&aq=t&rls=org.debian:es-ES:unofficial&client=iceweasel-a

ItNaS

pero yo no puedo editar el archivo. no está en mi host. hay alguna manera de hacerlo?

Y

readfile también admite url

ItNaS

poniendo eso lo que consigo es que se me ponga a descargar el download.php y no el video. Yo quiero que se abra el download.php donde aparece el link y que al clicar en el empieze la descarga. No se si me explico :S

gracias por tu ayuda

Y

he de suponer que ese download.php es el contenedor del código que te he indicado antes y he de suponer que no te has fijado en el código.

Donde pone $nombrearchivo es la variable que ha de contener el nombre del archivo que se va a descargar.

Osea, que si no quieres que te salga download.php has de asignar a esa variable el nombre del archivo que quieras.

Incluso, esto da más potencia a las descargas. Si tienes un archivo mp3 que se llame musica.mp3, puedes añadir datos tuyos.

Tal que, puedes hacer un:

$aux=explode('.','musica.mp3');
$nombrearchivo=$aux[0].'texto-que-yo-quiera'.aux[1];

y ese $nombrearchivo es el que se encuentra en:

header("Content-Disposition: attachment; filename=\"$nombrearchivo\"");

Por lo tanto, cuando hagan click en el link, el nombre con el que se descargará el archivo en vez de ser musica.mp3 será musica-texto-que-yo-quiera.mp3

Leete los códigos que te pasan y documentate, si no sabes, aprende cosas más básicas para empezar, y fíjate bien en las variables.

ItNaS

gracias

Usuarios habituales