Download de arquivos

Enviada por Adriano 
Adriano
Download de arquivos
24 de March de 2018 às 02:41PM
Olá pessoal boa tarde, gostaria muito da ajuda de vocês, estou desenvolvendo um site aonde vou compartilhar arquivos do tipo (PDF, WORD, EXCEL E POWER POINT) para os usuários baixarem, o que preciso é que quando os usuários clicarem no link do arquivo ele se inicie o download de imediato, abaixo vou postar um dos exemplos que encontrei na internet. o problema é que se o arquivo for grande ele demora muito em aparecer a janela de diálogo para salvar, até aonde sei, o php faz uma leitura primeiramente no arquivo e depois que envia para o usuário, desculpe a ignorância se não for isso... Gostaria de algo que fosse mais direto, simplesmente após clicar no link do arquivo ele já começasse o download. se alguém puder me ajudar ficarei muito agradecido.
// CÓDIGO PHP

<?php
if(isset($_GET['nome']) && isset($_GET['file'])){
$nome = $_GET['nome'];
$file = $_GET['file'];
if(!empty($nome) && !empty($file)){
$arquivo = ROOT . "upload/" . $file;
if(file_exists($arquivo)){
$extensao = substr(strrchr(basename($arquivo), "."), 1);
switch ($extensao) {
case "pdf": $tipo = "application/pdf";
break;
case "doc": $tipo = "application/msword";
break;
case "docx": $tipo = "application/msword";
break;
case "xls": $tipo = "application/vnd.ms-excel";
break;
case "xlt": $tipo = "application/vnd.ms-excel";
break;
case "xlsx": $tipo = "application/vnd.ms-excel";
break;
case "xlsm": $tipo = "application/vnd.ms-excel";
break;
case "ppt": $tipo = "application/vnd.ms-powerpoint";
break;
case "pptx": $tipo = "application/vnd.ms-powerpoint";
break;
}
$nomesalvar = filter_var(strtolower(str_replace(" ", "-", trim($nome))), FILTER_SANITIZE_URL);
header('Content-Description: File Transfer');
header('Content-Disposition: attachment; filename="' . $nomesalvar . '.' . $extensao . '"');
header('Content-Type: '. $tipo);
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($arquivo));
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Expires: 0');
ob_clean();
flush();
readfile($arquivo);
exit(0);
}else{
redirect(base_url('arquivos/listar/'));
}
}else{
redirect(base_url('arquivos/listar/'));
}
}
?>

Desde já agradeço a atenção e a ajuda de todos.
Você precisa estar logado no PHPBrasil.com para poder enviar mensagens para os nossos fóruns.

Faça o login aqui.