Jump to content
batistavn15

[Resolvido] Download de Ficheiro do Mysql

Recommended Posts

batistavn15

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{

}

?>

Edited by Rui Carlos
Formatação do código.

Share this post


Link to post
Share on other sites
HappyHippyHippo

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


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
batistavn15

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));

Edited by Rui Carlos
Formatação do código.

Share this post


Link to post
Share on other sites
HappyHippyHippo

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));

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


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
batistavn15

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

Share this post


Link to post
Share on other sites
HappyHippyHippo

eu perguntei : os teus ficheiros PHP estão gravados em que codificação e se essa codificação é UTF-8 com BOM


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
batistavn15

eu perguntei : os teus ficheiros PHP estão gravados em que codificação e se essa codificação é UTF-8 com BOM

UTF-8 Sem BOM

Share this post


Link to post
Share on other sites
HappyHippyHippo

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

Share this post


Link to post
Share on other sites
batistavn15

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);

Não, continua a fazer o mesmo

Share this post


Link to post
Share on other sites
HappyHippyHippo

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

Share this post


Link to post
Share on other sites
batistavn15

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)

Assim dá logo erro, nem download é efetuado

Share this post


Link to post
Share on other sites
batistavn15

mas que erro aparece ?

Não conseguiu aceder fazer download do ficheiro

Share this post


Link to post
Share on other sites
HappyHippyHippo

... copy paste do que te aparece ... eu não sou vidente, nem tenho o teamviewer ligado ao teu computador !!!

Edited by HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
batistavn15

... copy paste do que te aparece ... eu não sou vidente, nem tenho o teamviewer ligado ao teu computador !!!

Notice: Undefined offset: 4 in C:\wamp\www\Download\baixar_arquivo.php on line 10

Função: main

Edited by batistavn15

Share this post


Link to post
Share on other sites
batistavn15

Já experimentaste aquele link que te dei?

Sim já, ajustei e faz a mesma coisa... É algo que estou a fazer de errado e não sei o quê

Share this post


Link to post
Share on other sites
HappyHippyHippo
$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

Share this post


Link to post
Share on other sites
batistavn15

$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);

Faz o download mas dentro do ficheiro vem codigo novamente

Share this post


Link to post
Share on other sites

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.