Problema após Download de Arquivos

PHP

15/07/2011

Olá amigos, acontece o seguinte, tenho 3 arquivos .php, um pro usuario fazer o upload de arquivos pro servidor, outro que lista esses arquivos, e um ultimo que permite fazer o download deles, acontece que quando eu faço o upload deles pro server, vou lá na pasta eles tão lá bonitin e funcionando sem erro, quando eu faço o download, o conteudo dele acaba sendo danificada, não permitindo que eu abra o arquivo, seje .pdf, .jpg, .doc, com qualquer um deles após o download não abre, só que na pasta lá do server continuam funcionando normalmente, alguem sasbe me dizer o por que??

esse primeiro código é o arquivo upload.php responsavel pelo envio do mesmo

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Upload de Arquivos</title>
<?php include'conexao.php' ?>

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">

$(function()
{
    $("#load").hide();
    $("#up").click(function(){
        $("#load").show();
        })
}
)

</script>

</head>

<body>
<?php 
 if(isset ($_POST['acao']) && $_POST['acao'] == 'upload')
 {
   $pasta = 'arquivos/';
   $tmp_name = $_FILES["arquivo"] ["tmp_name"];
   $nome= $_FILES["arquivo"] ["name"];
   $code = md5($nome).'-'.$nome;
   $uploadFile = $pasta.$code;
   
   if(move_uploaded_file($tmp_name, $uploadFile))
   {
     $insert = mysql_query("insert into arquivos (nome) values ('$code')");
     $info = '<p>Arquivo Enviado com Sucesso</p>' ;
   }
   else
   {
       $info = '<p>Arquivo Não Enviado com Sucesso</p>' ;
   }
 }
 if(isset($info))
 {
     echo"$info";
 }
?>

<div id="load"><img src="images/load.gif"></div>

<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="arquivo" />
<input type="hidden" name="acao" value="upload" />
<input type="submit" value="Upload File" id="up" />
</form>

</body>
</html>




segue abaixo o código do listar.php que faz a listagem dos arquivos salvos


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Listar Arquivos Para Download</title>
<?php include"conexao.php" ?>
</head>

<body>

<?php
  foreach(glob("arquivos/*.*") as $v)
  {
      $name = basename($v);
      $thename = explode('-',$name);
      $mostra = $thename['1'];
      echo'<a href="baixar.php?file='.$name.'">'.$mostra.'</a><br>';
  }

?>
</body>
</html>




e por fim o baixar.php


<?php 
$pasta = 'arquivos';

if(isset($_GET['file']) && file_exists("{$pasta}/".$_GET['file']))
{
    $file = $_GET['file'];
    $type = filetype("{$pasta}/{$file}");
    $size = filesize("{$pasta}/{$file}");
    
    header("Content-Description:File Transfer");
    header("Content-Type:($type)");
    header("Content-lenght:($size)");
    header("Content-Disposition: attachment; filename=$file");
    readfile("{$pasta}/{$file}");
    exit;
}

?>


Eduardo Oliveira

Eduardo Oliveira

Curtidas 0

Respostas

Bruno Xavier

Bruno Xavier

15/07/2011


tente esse código abaixo:

header('Content-Description: File Transfer'); header('Content-Disposition: attachment; filename="'.$pasta.'/'.$file.'"'); header('Content-Type: application/octet-stream'); header('Content-Transfer-Encoding: binary'); header('Content-Length: ' . filesize($pasta.'/'.$file)); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); header('Expires: 0');
readfile($pasta.'/'.$file);
GOSTEI 0
Eduardo Oliveira

Eduardo Oliveira

15/07/2011

Valeu Bruno brigadão pela ajuda....
GOSTEI 0
POSTAR