Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Forzar descargas en php

Estas en el tema de Forzar descargas en php en el foro de PHP en Foros del Web. Buenas estoy con el siguiente script el cual parece estar bastante extendido por la red Código PHP: <?php if (!isset( $_GET [ 'file' ]) || empty( $_GET [ ...
  #1 (permalink)  
Antiguo 07/02/2014, 15:47
 
Fecha de Ingreso: julio-2009
Mensajes: 117
Antigüedad: 13 años
Puntos: 0
Forzar descargas en php

Buenas estoy con el siguiente script el cual parece estar bastante extendido por la red

Código PHP:
<?php

if (!isset($_GET['file']) || empty($_GET['file'])) {
 exit();
}
$root "usuarios/" $_GET['user'] . "/rutas/";
$file "nuevastarifas.rar"/*basename($_GET['file'])*/;
$path $root.$file;
$type '';

if (
is_file($path)) {
 
$size filesize($path);
 if (
function_exists('mime_content_type')) {
 
$type mime_content_type($path);
 } else if (
function_exists('finfo_file')) {
 
$info finfo_open(FILEINFO_MIME);
 
$type finfo_file($info$path);
 
finfo_close($info);
 }
 if (
$type == '') {
 
$type "application/force-download";
 }
 
// Definir headers
header("Content-Type: $type");
header("Content-Disposition: attachment; filename=$file");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " $size);
ob_clean();
flush();
// Descargar archivo
readfile($path);
} else {
 die(
"El archivo no existe.");
}
    
?>
Mi problema es que ponga el tipo de archivo que ponga siempre me lo abre en el navegador en ningún caso lo descarga.

Si alguien tiene una solución o un script mejor que lo diga.

Gracias.


Edito--->> mi versión de php es 5.4 y mi hosting es 1and1, por si sirve de ayuda.

Última edición por taoshi; 07/02/2014 a las 17:28
  #2 (permalink)  
Antiguo 07/02/2014, 21:24
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 11 años, 5 meses
Puntos: 288
Respuesta: Forzar descargas en php

no se por que valida esto:

//if ($type == '') {
$type = "application/force-download";
//}
  #3 (permalink)  
Antiguo 08/02/2014, 07:01
 
Fecha de Ingreso: julio-2009
Mensajes: 117
Antigüedad: 13 años
Puntos: 0
Respuesta: Forzar descargas en php

Cita:
Iniciado por Patriarka Ver Mensaje
no se por que valida esto:

//if ($type == '') {
$type = "application/force-download";
//}
Aunque sea un comprobación innecesaria no afecta al resultado lo acabo de comprobar, podría ser por el hosting?
  #4 (permalink)  
Antiguo 10/02/2014, 07:31
 
Fecha de Ingreso: julio-2009
Mensajes: 117
Antigüedad: 13 años
Puntos: 0
Respuesta: Forzar descargas en php

Alguien mas sabe decirme algo u otra alternativa?
  #5 (permalink)  
Antiguo 10/02/2014, 08:07
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 14 años, 7 meses
Puntos: 2658
Respuesta: Forzar descargas en php

A mi me encanta esta descripcion del significado, encontrada en Stackoverflow:
Cita:
Content-Type: application / force-download significa "Yo, el servidor web, voy a mentirle a usted (el navegador) acerca de lo que este archivo es para que no lo trate como un PDF / Documento Word/MP3/lo que sea, y le pida al usuario que guarde el archivo misterioso en el disco ". Es un truco que se rompe horriblemente cuando el cliente no lo hace "guardar en disco".
¿Se entiende la idea?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 10/02/2014, 09:17
 
Fecha de Ingreso: julio-2009
Mensajes: 117
Antigüedad: 13 años
Puntos: 0
Respuesta: Forzar descargas en php

Cita:
Iniciado por gnzsoloyo Ver Mensaje
A mi me encanta esta descripcion del significado, encontrada en Stackoverflow:


¿Se entiende la idea?
Tema solucionado, y no gracias a "Content-Type: application / force-download" ya que eso estaba probado y reprobado junto con otras tantas cabeceras.


Solucionado.

Etiquetas: descargas, usuarios
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 21:10.