Descarga y Redireccionamiento

Necesito descargar un archivo y luego de esto redireccionar a otra página.
Actualmente trato de hacerlo de la siguiente manera:
# Abrimos un diálogo de descarga para permitir que se guarde el archivo indicado.
function abrir_dialogo_de_descarga($nombre_archivo, $ruta_archivo) {
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename = ' . $nombre_archivo);
readfile($ruta_archivo);
}
abrir_dialogo_de_descarga('prueba.rar', 'archivos/prueba.rar');
header('Location: http://www.google.com.ar');
Si alguien sabe como ayudarme se lo agradecería mucho.
.:: Wolverine4277 ::.

1 Respuesta

Respuesta
1
Prueba con este código, OJO que solo funciona bajo PHP como modulo de Apache
<?
$headers = $_SERVER['HTTP_RANGE'];
// Si usas PHP inferior a 4.1.x usar $headers=$HTTP_RANGE; (y register_globlas a ON)
$filename="archivo.exe";
//aca se obtiene la cabecera que nos dice desde que byte tenemos que enviar
//lo guardamos en $bytes.
if ($headers[Range]){
$pos=strpos ($headers[Range], "bytes=");
$pos2=strpos($headers[Range],"-");
$bytes=substr ($headers[Range], $pos+strlen("bytes="),$pos2-($pos+strlen("bytes=")));
}else{
$bytes=0;
}
settype ($bytes, "integer");
$tarchivo=filesize($filename)-$bytes;
$ttotal=filesize($filename);
error_reporting(0);
header("Last-Modified: " . gmdate("D, d M Y H:i:s T", filemtime($filename)));
header("Accept-Ranges: bytes");
header("Content-Length: " . $tarchivo);
header("Content-Disposition: attachment; filename="."archivo.exe");
//indicamos al cliente que bytes del archivo vamos a transferir
//en este caso es desde $bytes hasta el final del archivo
//que es lo que nos pide el get right normalmente
//se puede modifcar tomando el ultimo byte del rango
//para hacer mirroring tipo kazaa (seria una version mas avanzada)
header("Content-Range: bytes ".$bytes."-".($ttotal-1)."/".$ttotal);
header("Content-Type: application/octet-stream");
//abrimos el archvo
$fp = fopen($filename,'rb');
if (!$fp) {
echo "error de apertura";
exit();
}
//nos movemos hasta el byte donde debemos empezar a mandar informacion
rewind ($fp);
fseek ($fp, $bytes);
//mandamos el pedazo de archivo correspondiente
// La función fpassthru() es similar a readfile() en que manda el archivo por la salida estándar (mejor que usar un ciclo con fread adentro),
// La diferencia con readfile es que debe ser abierto con fopen, esta función devuelve todos los bytes por la salida estándar
// desde la posicion actual del puntero hasta el final del archivo
if(!fpassthru($fp)) {
echo "error de salida";
exit();
}
header("Connection: close");
exit();
?>

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas