Jump to content

Recommended Posts

Posted

Boas pessoal, tenho uma grande duvida e precisava da vossa ajuda, tenho ficheiros na BD mysql, no phpmyadmin, e é o seguinte quando realizo o download o ficheiro em .txt vem com códigos em vez do conteudo que estava lá dentro, e um ficheiro .pdf diz que o ficheiro foi danificado. Agradecia imenso a vossa ajuda, pois é de um estado urgente.

Páginas:

Adicionar ficheiro:

<?php
require("dbconnect.inc.php");
$arquiivo = $_FILES['arquivo']['tmp_name'];
$tamanho = $_FILES['arquivo']['size'];
$tipo = $_FILES['arquivo']['type'];
$nome = $_FILES['arquivo']['name'];
$titulo = $_POST['titulo'];
if ( $arquivo != "none" )
{
 $nome = $_FILES['arquivo']['name'];
 $arquiivo = $_FILES['arquivo']['tmp_name'];
 $fp = fopen($arquivo, "r");
 $conteudo = fread($fp, filesize($tamanho));
 $conteudo = addslashes($conteudo);
 fclose($fp);
 if(!get_magic_quotes_gpc())
 {
 $nome = addslashes($nome);
 }

 $qry = mysql_query ("INSERT INTO arquivos VALUES ('','$nome','$titulo','$conteudo','$tamanho', '$tipo')");


 if(mysql_affected_rows($conn) > 0)
   print "O arquivo foi gravado na base de dados.";
 else
   print "Não foi possível gravar o arquivo na base de dados.";
}
else
 print "Não foi possível carregar o arquivo para o servidor.";

?>

Mostrar ficheiros:

!-- ...código anterior -->
<form enctype="multipart/form-data" action="guardar_arquivo.php" method="post">
Descricao <input type="text" name="titulo" size="30">
Arquivo <input type="file" name="arquivo">
<input type="submit" value="Enviar arquivo">
</form>
<!-- ...código posterior -->
<tbody>
<?php
require("dbconnect.inc.php");
$qry = "SELECT * FROM arquivos";
$res = mysql_query($qry);
while($fila = mysql_fetch_array($res))
{


 echo "<tr>";
 echo "<td>". $fila['titulo']."</td>";

 ?>
 <td><a href="baixar_arquivo.php?nid=<?php echo $fila['id']; ?>">Fazer Download</a></td>

 <?php
}
?>
</tbody>

Para download:

<?php
require("dbconnect.inc.php");
$id = @($_GET["nid"]);

if($id != "") {

 $result = mysql_query("select nome, conteudo, tamanho, tipo From arquivos where id='$id'") or die('Error, query failed');
 list($name, $titulo, $conteudo, $size, $type) = mysql_fetch_array($result);
 header("Content-length: $size");
 header("Content-type: $type");
 header("Content-Disposition: attachment; filename=$name");
 echo $conteudo;
}
else{

}

?>

  • Replies 42
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Posted

estão os teu ficheiros PHP gravados em UTF-8 com BOM ?

O meu código para criar a BD foi:

CREATE TABLE arquivos(
 id int not null auto_increment primary key,
 nome varchar(50),
 titulo varchar(50),
 conteudo mediumblob,
 tamanho int not null,
 tipo varchar(50));
Posted (edited)

Reparei que o teu código é idêntico a: http://mirificampress.com/permalink/saving_a_file_into_mysql, mas faltam-te aí passos. O problema deve estar na introdução do ficheiro na base de dados.

Por acaso não foi a fonte que segui

isso não responde à minha questão, nem de perto nem de longe ...

Então não percebi a questão

Edited by batistavn15
Posted

UTF-8 Sem BOM

ok ... vamos ver se o problema é do addslashes:

 // $conteudo = addslashes($conteudo);
 $conteudo = base64_encode($conteudo);
 $qry = mysql_query ("INSERT INTO arquivos VALUES ('','$nome','$titulo','$conteudo','$tamanho', '$tipo')");

 header("Content-length: $size");
 header("Content-type: $type");
 header("Content-Disposition: attachment; filename=$name");
//  echo $conteudo;
 echo base64_decode($conteudo);
IRC : sim, é algo que ainda existe >> #p@p
Posted

testas então isto:

<?php
// apaga tudo antes do "<?php" mesmo os espaços !!!

require("dbconnect.inc.php");
$id = @($_GET["nid"]);

if($id != "") {

 $result = mysql_query("select nome, conteudo, tamanho, tipo From arquivos where id='$id'") or die('Error, query failed');
 list($name, $titulo, $conteudo, $size, $type) = mysql_fetch_array($result);
/*
 header("Content-length: $size");
 header("Content-type: $type");
 header("Content-Disposition: attachment; filename=$name");
 echo $conteudo;
*/
}
else{

}

// apaga tudo depois do "?>" mesmo os espaços !!!
?>

e diz se aparece alguma coisa ou se resposta tem mesmo conteúdo (usa os development tools do teu browser)

IRC : sim, é algo que ainda existe >> #p@p
Posted
$result = mysql_query("select nome,        <----------- 1
                             conteudo,    <----------- 2
                             tamanho,     <----------- 3
                             tipo         <----------- 4
                        From arquivos where id='$id'") or die('Error, query failed');

list($name,                             // <----------- 1
    $titulo,                           // <----------- 2
    $conteudo,                         // <----------- 3
    $size,                             // <----------- 4
    $type)                             // <----------- 5
   = mysql_fetch_array($result);
IRC : sim, é algo que ainda existe >> #p@p

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.