Jump to content
Fórum Script Brasil
  • 0

Dúvida Sobre a disponibilização de links para download de arquivos BLO


jefponte

Question

Achei um tutorial que me ensinou como fazer o formulário de envio de arquivos e a listagem dos arquivos com link para download. Mas os códigos deram problema na hora do download do arquivo. Ou seja, o formulário está funcionando, pois consigo receber os arquivos enviados no meu banco de dados, mas não consigo exibir os links para download.

Se alguém puder me explicar como faço essa listagem, eu agradeço muito.

link do formulário do site: http://gcsufc.com.br/ensaiomaffesoli.php

Aqui vai os códigos do site:

ensaiosmaffesoli.php //é o local onde fica o formulário e a exibição da lista de arquivos

<p>Aqui você pode enviar seu ensaio e contribuir para um contrução de um bloco com download de trabalhos de todos</p>

<form enctype="multipart/form-data" action="guardar_arquivo.php" method="post"><br>

Autor: <input type="text" name="titulo" size="30"><br>

Arquivo <input type="file" name="arquivo"><br>

<input type="submit" value="Enviar arquivo">

</form>

<hr>

<?php

$conexao = mysql_connect("localhost","oreidosl_root","minhasenha");

$banco = mysql_select_db("oreidosl_forum", $conexao);

$qry = "SELECT id, nome, titulo, tipo FROM arquivos";

$res = mysql_query($qry);

while($fila = mysql_fetch_array($res))

{

echo $fila['titulo'] . $fila['nome'] . ($fila['tipo']) . '<a href=baixar_arquivo.php?id=' . $fila['id] . '">Fazer Download</a>';

}

?>

guardar_arquivo.php//esse arquivo é responsável pela inserção dos dados e do arquivo no banco, está funcionando,

pois consigo acessar os arquivos enviados direto no phpmyadmin

<?php

$conexao = mysql_connect("localhost","oreidosl_root","minhasenha");

$banco = mysql_select_db("oreidosl_forum", $conexao);

$titulo = $_POST["titulo"];

$arquivo = $_FILES['arquivo']['tmp_name'];

$tamanho = $_FILES['arquivo']['size'];

$tipo = $_FILES['arquivo']['type'];

$nome = $_FILES['arquivo']['name'];

if ( $_FILES['arquivo']['error'] == 0 )

{

$fp = fopen($arquivo, "r");

$conteudo = fread($fp, $tamanho);

$conteudo = addslashes($conteudo);

fclose($fp);

$qry = "INSERT INTO arquivos(nome, titulo, conteudo, tipo) VALUES

('$nome','$titulo','$conteudo','$tipo')";

$resultado = mysql_query($qry) or die (mysql_error());

mysql_close($conexao);

echo "Dados inseridos com sucesso! Estamos redirecionando para a página inicial.";

}

else{

echo "Dados não foram inseridos com sucesso! Estamos redirecionando para a página inicial.";

}

?>

baixar_arquivo.php //Esse aqui é que eu num to conseguindo acertar. Me deram um código mais ou menos assim.

<?php

$conexao = mysql_connect("localhost","oreidosl_root","minhasenha");

$banco = mysql_select_db("oreidosl_forum", $conexao);

$qry = "SELECT tipo, conteudo FROM arquivos WHERE id=$id";

$res = mysql_query($qry);

$tipo = mysql_result($res, 0, "tipo");

$conteudo = mysql_result($res, 0, "conteudo");

header("Content-type: $tipo");

print $conteudo;

?>

-------

eu não sei se o problema está no link colocado na listagem ou no baixar_arquivo.php, só sei que não encontrei em lugar nenhum algo sobre isso.

Até onde está feito, aprendi nesse tutorial:

http://www.oficinadanet.com.br/artigo/1599...com_php_e_mysql

Por favor, me ajudem. Eu queria muito resolver isso.

Edited by jefponte
Link to comment
Share on other sites

10 answers to this question

Recommended Posts

  • 0

eu sou meio contra a ideia de colocar arquivos dentro da base de dados.. prefiro apenas colocar o nome e salvar em um local separado, assim a tabela não fica tão grade.

mas a escolha é sua

o erro

Warning: Cannot modify header information - headers already sent by (output started at /home/oreidosl/public_html/fcsufc/arquivos/baixar_arquivo.php:8) in /home/oreidosl/public_html/fcsufc/arquivos/baixar_arquivo.php on line 11

voce deve estar escrevendo algo antes de algum header ou session_start

já o

expects parameter 1 to be resource, da uma revisada na tabela, nome dela nome do campo, tipo do campo

Link to comment
Share on other sites

  • 0
eu sou meio contra a ideia de colocar arquivos dentro da base de dados.. prefiro apenas colocar o nome e salvar em um local separado, assim a tabela não fica tão grade.

mas a escolha é sua

o erro

Warning: Cannot modify header information - headers already sent by (output started at /home/oreidosl/public_html/fcsufc/arquivos/baixar_arquivo.php:8) in /home/oreidosl/public_html/fcsufc/arquivos/baixar_arquivo.php on line 11

voce deve estar escrevendo algo antes de algum header ou session_start

já o

expects parameter 1 to be resource, da uma revisada na tabela, nome dela nome do campo, tipo do campo

Jissa, eu não usei session_start. Meu site ainda não trabalha com sessão. Ainda temos poucos usuários, então não vejo problema em abrir para qualquer um enviar arquivos para o banco. Hei, Jissa, se você é contra a ideia de colocar arquivos dentro da base de dados, como eu deveria receber e disponibilizar esses arquivos?

Link to comment
Share on other sites

  • 0

se não usou o session deve ter algum header

arquivos, depende, se forem coisas seguras que ninguém poderia achar ou baixar pelo google colocaria em uma area que somente scripts no servidor acessem

tipo normalmente a estrutura de um servidor é

/home/user/public_html ou /www

o que os visitantes enxergam é o public_html ( o que tem antes dele não é visto pela internet )

então, se for pensar em segurança dos arquivos poderia criar um diretorio antes deste public_html,

ai teria mais um no raiz de seu diretorio de usuario tipo documentos

ai teria algo como:

/documentos

/mail

/public_html

/tmp

ai somente pelo ftp ou se criar um script para leitura veria estes arquivos

agora, se forem arquivos livres ai pode colocar dentro da pasta do public_html ou mesmo em subdiretorios dentro dela

Link to comment
Share on other sites

  • 0
se não usou o session deve ter algum header

arquivos, depende, se forem coisas seguras que ninguém poderia achar ou baixar pelo google colocaria em uma area que somente scripts no servidor acessem

tipo normalmente a estrutura de um servidor é

/home/user/public_html ou /www

o que os visitantes enxergam é o public_html ( o que tem antes dele não é visto pela internet )

então, se for pensar em segurança dos arquivos poderia criar um diretorio antes deste public_html,

ai teria mais um no raiz de seu diretorio de usuario tipo documentos

ai teria algo como:

/documentos

/mail

/public_html

/tmp

ai somente pelo ftp ou se criar um script para leitura veria estes arquivos

agora, se forem arquivos livres ai pode colocar dentro da pasta do public_html ou mesmo em subdiretorios dentro dela

Certo, então é mais profissional usarmos o arquivo dentro do diretório, né?

Então vou fazer isso e o Mysql só vai listar o endereço do arquivo e assim, disponibilizar o download. Parece fácil essa parte.

Encontrei um codigo de formulario e outro responsavel pelo envio do arquivo e to tentando fazer isso que você me falou.

Nesse link: http://gcsufc.com.br/teste/form.php

O envio do arquivo está apresentando o seguinte erro.

Warning: move_uploaded_file(/var/www/fcsufc/arquivos___LLLLLL.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in /home/oreidosl/public_html/fcsufc/teste/valida.php on line 8

Código do responsavel pela tentativa de envio copiado desse site "http://php.net/manual/pt_BR/features.file-upload.post-method.php":

<?php

// Nas versões do PHP anteriores a 4.1.0, deve ser usado $HTTP_POST_FILES

// ao invés de $_FILES.

$uploaddir = '/var/www/fcsufc/arquivos/';

$uploadfile = $uploaddir . $_FILES['userfile']['name'];

print "<pre>";

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . $_FILES['userfile']['name'])) {

print "O arquivo é valido e foi carregado com sucesso. Aqui esta alguma informação:\n";

print_r($_FILES);

} else {

print "Possivel ataque de upload! Aqui esta alguma informação:\n";

print_r($_FILES);

}

print "</pre>";

?>

Porque tem esse /var/ antes do www?

Por que está dando erro? Sei que agora o problema não é mais em Mysql, mas se você me ajudar eu estarei grato.

---

Quando eu enviar o arquivo eu posso listar fazer um banco de dados que apresenta os links para esses arquivos, não é??

Link to comment
Share on other sites

  • 0

O site está funcionando legal. E estou recebendo os arquivos num diretorio do servidor. Porém, surgiu um novo problema.

Quando alguém enviar um arquivo com o mesmo nome de um arquivo enviado antes, este será substituído pelo novo. Como evitar isso?

Link to comment
Share on other sites

  • 0

voce pode usar a função file_exists para verificar a existencia do arquivo, se não existir envia

http://br.php.net/file-exists

ou dar um nome novo a cada upload

ou ainda adicionar alguma coisa no inicio ou final do arquivo, tipo o id que salvou ou colocar a função time() ou o codigo do cliente, ai voce ve o que é melhor para a aplicação

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...