Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

roots_raiz

Forçar Download - Corrompendo arquivos...

Recommended Posts

Boa noite,

 

Quando faço download os arquivos corrompem

Passo via GET o nome da pasta e o nome do arquivo.

 

Segue os códigos:

 

INDEX.PHP:

<?php
           foreach(glob("hospedagem_arquivos/*.*") as $v){
               $name = basename($v);
               echo '<li><a href="baixar.php?file='.$name.'">'.$name.'</a></li>';
           }
       ?>

 

 

BAIXAR.PHP

 

 

   <?php
           $pasta = 'hospedagem_arquivos';
           if(isset($_GET['file']) && file_exists("{$pasta}/".$_GET['file'])){
              $file = $_GET['file'];
              header("Content-Disposition: attachment; filename=$file");
              readfile("{$pasta}/{$file}");
              exit;
           }
   ?>

 

Abrindo ou salvando está corrompendo!!

 

Caso saibam, me ensinem!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você precisa informar o mime type e tamanho do arquivo. Veja um exemplo:

 

<?php

$arquivo = $_GET['arquivo'];

//Recupera Mime Type do Arquivo
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $arquivo) . "\n";

//Lê todo o conteúdo de um arquivo para uma string
$conteudoArquivo = file_get_contents($arquivo);

header('Content-Type: "'.$mime.'"');
header('Content-Disposition: attachment; filename="'.$arquivo.'"');
header("Content-Transfer-Encoding: binary");
header('Expires: 0');
header('Pragma: no-cache');
header("Content-Length: ".strlen($conteudoArquivo));

 

 

Atenção! Cuidado com a segurança, ao informar qual arquivo deve baixar pelo GET, pois pode ser que a pessoa manipule o GET para baixar outros arquivos do sistema.

 

 

Referências

header

http://www.php.net/manual/pt_BR/function.header.php

 

finfo_file

http://www.php.net/manual/pt_BR/function.finfo-file.php

 

file_get_contents

http://www.php.net/manual/pt_BR/function.file-get-contents.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.