+4

Armazenando Arquivos Binários no MySQL

criado por Bruno Rodrigues Silva em 11/04/2002 11:52am
dados.php

<?php
include 'config.inc'; 
$conteudo=addslashes(fread(fopen($arq, "r"), filesize($arq))); 
/* A função addslashes ( ) faz o escape de aspas simples, aspas duplas, de barras invertidas e NULLs com barras invertidas, pois esses são os caracteres que precisam ser "escapados" em consultas de banco de dados. */

//Armazena no banco de dados
$con=mysql_connect ($srv, $usr, $snh) or print mysql_error();
$db=mysql_select_db ($banco, $con) or print mysql_error();
$sql="insert into arquivos (nome, tipo, tamanho, dados) values ('$arq_name', '$arq_type', '$arq_size', '$conteudo')";
$exec=mysql_query ($sql, $con) or print mysql_error();
mysql_close ($con);
header ("Location: $url/principal.php");		/* direciona para o formulário */
?>

copiar.php

<?php

include 'config.inc';
$con=mysql_connect ($srv, $usr, $snh) or print mysql_error();
$db=mysql_select_db ($banco, $con) or print mysql_error();
$sql="select * from arquivos where (nome='$arquivo')";
$exec=mysql_query($sql, $con) or print mysql_error();
$vet=mysql_fetch_array($exec);
$arq_nome=$vet["nome"];
$arq_tipo=$vet["tipo"];
$arq_tamanho=$vet["tamanho"];
$arq_dados=$vet["dados"];

  header("Content-type: $arq_tipo");
  header("Content-length: $arq_tamanho");
  header("Content-Disposition: attachment; filename=$arq_nome");
  header("Content-Description: PHP Generated Data");
  echo $arq_dados;
mysql_close($con);
?>

Links

http://www.phpbrasil.com
http://www.php.net

Autor: Bruno Rodrigues Silva
Contatos: brunors@spep.com.br
ICQ: 112252249
Estudante de Ciência da Computação – Faculdades Integradas de Caratinga/MG
07/04/2002

Comentários:

Mostrando 1 - 10 de 34 comentários
Alguém consegue me ajudar?
Estou passando extamente por este problema.
Só que ao invés de colocar um link quero apenas exibir a foto.
Tentei usar object e img mas não consigo.
Alguém sabe como fazer isso?
16/07/2008 3:45pm (~16 anos atrás)

fccd disse:
Grande utilidade esse artigo!

Valeu!
10/01/2008 11:10am (~16 anos atrás)

Andre Lamota disse:
NAo entendo muito de php e mysql, mas creio que segui os passo direitin, o que acontece é que quando vai mostrar a imagem, só mostra os hexadecimais dela e nao a imagem propriamente dita, o que será que está acontecendo
QUero que mostre as imagens nao os hexadecimais dela..

Obrigado
19/08/2006 7:30am (~17 anos atrás)

Caro Roberto,

Eu utilizo o mesmo esquema de armazenamento de informação do bruno, porem deve-se renomear esse arquivo .ini para .php, assim, teóricamente, ninguém conseguirá acessar suas informações do BD.

Att
Thiago Teixeira
22/05/2006 5:56am (~18 anos atrás)

CARLOS disse:
kkk
07/04/2006 2:10pm (~18 anos atrás)

CARLOS disse:
estou usando o (Armazenando Arquivos Binários no MySQL) para armazenar imagem, como faço para abrir as fotos dendro do site. e para um pagina de noticias eu quero inserir o texto com a imagem que esta la! grato
07/04/2006 12:59pm (~18 anos atrás)

Olá Bruno, dei uma olhada no seu artigo publicado no PHPBrasil ! muito bom ! No entanto tenho um problema. O processo de inserir o registro esta normal, mas quanto faço uma solicitação para baixar o arquivo, é mostrado naquela tela de download o Nome do Arquivo : Tipo do Arquivo, mas o Tamanho vem zerado, ou seja, quando faço o download, o arquivo vem com tamanho Zero .
Sabe porque acontece isso ?

Valeu
17/03/2006 5:03am (~18 anos atrás)

E no PostGreSQL, como ficaria ? Qual o tipo de dado ?
29/09/2005 8:01am (~18 anos atrás)

Dartanhan disse:
Estou tendo esse erro, na hora que clico no nome do arquivo para baixar:

Warning: Cannot modify header information - headers already sent by (output started at /home/rgarber/www/noticias/blob/copiar.php:6) in /home/rgarber/www/noticias/blob/copiar.php on line 19

Warning: Cannot modify header information - headers already sent by (output started at /home/rgarber/www/noticias/blob/copiar.php:6) in /home/rgarber/www/noticias/blob/copiar.php on line 20

Warning: Cannot modify header information - headers already sent by (output started at /home/rgarber/www/noticias/blob/copiar.php:6) in /home/rgarber/www/noticias/blob/copiar.php on line 21

Warning: Cannot modify header information - headers already sent by (output started at /home/rgarber/www/noticias/blob/copiar.php:6) in /home/rgarber/www/noticias/blob/copiar.php on line 22
GIF89aÔ<æ¾Ìݘ·gPm[;MC333¬µ½Zq–ÎÝä!M?¤¯µ !o:)‹p8ßæ槪¡]PF»ÆÊ„ŠŒ™™™Yl†MTn4:<ÄxPÝæïROD7^’¬Ìt¼Ìç’?~µ½¼MJ!ÿ NETSCAPE2.0!ù,ÿ,Ô<ÿ€ ‚ƒ„…†‡ˆ‰Š‹Œ?Ž?? D“”•–—˜™š›œ?žŸ ¡¢—I¥¦§¨¥™©­®22]²³´µ¶´°°s»®¾dÁÂd<ÅÆÇÈÅ¿¾vÍvËÀÃYÓÇÁλs®®Îv®Ø»±³¹®©I‘çèéêë샣ïœíŠðñò‹•å¨Ÿù¥¯á·»ä(#[/h¿†%[¸p˜CaÓ"JÌÌ7n¦.:ÓömN3SD’‰B‡ƒJ†ħ…/ƒø¤
......
.....
.....
.....
.....
.....

Como posso resolver isso??
14/09/2005 3:21pm (~18 anos atrás)

como faço para mostrar a imagem <img scr> direto do banco sem ter que copiar para o hd
17/08/2005 8:28am (~18 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)