Forzar descargas de archivos con PHP

Qalpha Seguir

Redactor
No recomendado
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
27 Jul 2013
Mensajes
420
Pues eso, deseo forzar descargas con PHP, lo se hacer, pero quiero que solo te permita descargar de X url, ya que sino se pueden bajar archivos de mi host y demas.
 

miquelcamps

Beta
Programador
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
13 Ago 2013
Mensajes
117
sólo aclarar el código de Julio :)

PHP:
<?php
$ruta_archivo = 'uploads/video.mov';
$nombre_archivo = basename($ruta_archivo); // o el nombre del fichero que quieras, ej. test.mov

header("Content-disposition: attachment; filename=$nombre_archivo");
header("Content-type: application/octet-stream");
readfile($ruta_archivo); // lo que hace la función readfile es leer el contenido del fichero
?>
 
Última edición:

javier29pe

Sigma
SEO
Verificación en dos pasos activada
Verificado por Whatsapp
Desde
26 Nov 2011
Mensajes
9.209
Escelente aportacion y agradecido, puedo abusar de vuestra ayuda?

he de entender que al abrirse la pagina se iniciara la descarga del archivo, automaticamente?

si no fuera asi, podriais poner un ejemplo?

gracias.

sólo aclarar el código de Julio :)

PHP:
$ruta_archivo = 'uploads/video.mov';
$nombre_archivo = basename($ruta_archivo); // o el nombre del fichero que quieras, ej. test.mov

header("Content-disposition: attachment; filename=$nombre_archivo");
header("Content-type: application/octet-stream");
readfile($ruta_archivo); // lo que hace la función readfile es leer el contenido del fichero
 

Qalpha

Redactor
No recomendado
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
27 Jul 2013
Mensajes
420
Es para un sitio de descargas de Goear y no consigo
 

miquelcamps

Beta
Programador
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
13 Ago 2013
Mensajes
117
[MENTION=18039]javier29pe[/MENTION] si al abrir la página empezaría la descarga, si el fichero no es local en vez de usar readfile usa la file_get_contents($url)
lo único que tienes que hacer en el código es poner la ruta local y el nombre que quieras poner al fichero cuando se descarga

[MENTION=46199]Qalpha[/MENTION] en un tema anterior alguién ya preguntó por un script de descargas en goear
http://forobeta.com/php/102539-busco-script-de-descarga-de-mp3.html
 

shadowhck

Lambda
Programador
Verificado por Whatsapp
Desde
18 Ago 2009
Mensajes
2.772
Yo uso esto:
PHP:
<?php
# shadowhck: Forobeta.com. xD
$file = __DIR__ . '/protegido/backup-1.19.2012_18-04-19_xlwgbzbg.tar.gz';

# Se envia el User-Agent secreto para acceder al archivo.
$opciones = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>"Accept-language: en\r\n" .
              "User-Agent: 552dsk343\r\n"
  )
);
$contexto = stream_context_create($opciones);


# El .htaccess debe contener lo siguiente en el directorio protegido:
/*
RewriteEngine On

# User-agent's
SetEnvIfNoCase User-Agent "552dsk343" allow_bot

Order Deny,Allow
Deny from All
Allow from env=allow_bot
*/

# Se fuerza el timeout 0, para evitar problemas con archivos grandes, y con las conexiones lentas.
set_time_limit(0);

if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file, false, $contexto);
    exit;
}

Desconosco si se pueden ver los headers desde un navegador, pero funciona bien. :cool:
 
Última edición:
Arriba