Função para forçar download de arquivos em PHP

Existe alguns arquivos com certas extensões que tem uma exceção no procedimento de download. Neste exemplo abaixo o download é forçado para todos tipos de extensões.

Espero que este código seja útil para você assim como é para mim.
Se possível deixe seu cometário avaliando.

 <?php function downloadExcecao ($arquivo,$novoNome){  
     $destino ="c:/www/site/temp/$novoNome"; //diretório desde a raíz  
         copy($arquivo, $destino);  
         print("<script>var pg = window.open('www.site.com.br/temp/$novoNome','', 'width=200, height=1, top=0, left=0'); if(!pg){alert('O Bloqueador de Pop-up est\xE1 ativado, para fazer download de arquivos, na faixa amarela acima, clique no bot\xE3o OP\xC7\xD5ES, depois clique em PERMITIR POPUPS, ou DESBLOQUEAR.'); history.back(1);}else{history.back(1);}</script>");  
         exit;  
 }  
 function downloadArquivo($nomeArquivo){  
     $arquivo = "c:/www/site/img/".$nomeArquivo; /// endereço do arquivo que será feito download  
    $novoNome = "novoNomeArquivo.extencao"; ///substituir espaço por "_" caso necessário e não usar acento///  
     if(file_exists($arquivo)){ // faz o teste se o arquivo realmente existe antes de forçar o download do mesmo//  
 /////pegar extenção////////////  
 list($width, $height, $type, $attr) = getimagesize($arquivo);  
 $ext = image_type_to_extension($type);  
 ///////////////////////////  
       switch($ext){ // verifica a extensão do arquivo para pegar o tipo  
         case "pdf": $tipo="application/pdf"; break;  
         case "exe": //$tipo="application/octet-stream"; break;  
         case "zip": $tipo="application/zip"; break;  
         case "rar": $tipo="application/rar"; break;  
         case "doc": $tipo="application/msword"; break;  
         case "docx": $tipo="application/msword"; break;  
         case "odt": $tipo="application/vnd.oasis.opendocument.text"; break;  
         case "xls": $tipo="application/vnd.ms-excel"; break;  
         case "ppt": $tipo="application/vnd.ms-powerpoint"; break;  
         case "gif": $tipo="image/gif"; break;  
         case "png": $tipo="image/png"; break;  
         case "jpeg": $tipo="image/jpeg"; break;  
         case "mp3": $tipo="audio/mpeg"; break;  
         case "php": // deixar vazio por seurança  
         case "htm": // deixar vazio por seurança  
         case "html": // deixar vazio por seurança  
         case "asp": // deixar vazio por seurança  
         }  
         if(isset($tipo)){  
           if($ext=="doc" || $ext=="docx" || $ext=="odt"){ /// caso o arquivo seja com essas extensões então força download de outra forma//////  
           downloadExcecao($arquivo,$novoNome);  
           }else{  
             // Configuramos os headers que serão enviados para o browser  
             header('Content-Description: File Transfer');  
             header("Content-Type: ".$tipo);  
             header('Content-Disposition: attachment; filename="'.$novoNome.'"');  
             header('Content-Type: application/octet-stream');  
             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');  
             // Envia o arquivo para o cliente  
             ob_end_clean();  
             flush();  
             readfile($arquivo);  
           }  
         }else{  
           print "<script>alert('Não é possível fazer o download deste arquivo, tente novamente mais tarde.');</script>";  
         }  
         exit; // aborta pós-ações  
         }  
       }  
 ?>  

0 comentários:

Postar um comentário