Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Raphael Melo_136691

Armazenamento de imagens em banco de dados

Recommended Posts

Algum moderador pode mover para artigos e tutoriais?

Teoria

Ola pessoal este e meu primeiro tutorial aqui no forum e eu irei ensinar como armazenar imagem em banco de dados.

Primeiro vamos criar 2 campos:id e imagem.Voces estao acostumados com id sendo do tipo int com 5 caracteres de comprimento,certo?Neste script usaremos char com 4 de comprimento,o campo imagem sera do tipo LONGBLOB que e o formato proprio para arquivos,seria como um LONGTEXT mas armazena binarios.

Mas prumodique eu vo usar isso se armazenar no disco e mais facil e rapido???Isso serve quando:

-Voce tem informaçoes muito sensiveis no disco;

-Existem atacantes que sao um risco a considerar;

-Departamento de segurança que enche o saco 25Horas por dia;

-Necessidade de fazer firula no sistema;

-Criar post em forum para mostrar que voce nao e um completo anaufabeto.

Pratica

Vamos criar 3 arquivos:

index.html <-Formulario de upload;

recebe.php <-arquivo que recebe a imagem posta no banco e retorna URL;

visualizar.php <-arquivo que exibe a imagem.

O index.html e um form de upload normal com um campo do tipo file e um botao de submit.

<html>
<body>
   <form name="imagem" action="recebe.php" method="post" enctype="multipart/form-data" id="imagem">
       <span>Email:</span>
       <input name="email" type="text" id="email">
       <br>
       <span>Arquivo:</span>
       <input name="arquivo" type="file" id="arquivo"><br>
       <input name="Enviar" type="Submit">
   </form>
</body>
</html>

recebe.php comentado

<?php

$imagem = addslashes(file_get_contents($_FILES['arquivo']['tmp_name'])); //Pega a imagem e escapa os caracteres
$host = "localhost/upload/visualizar.php?img="; //Endereço completo do arquivo visualizar
$uniqid = substr(md5(uniqid()),0,4); //Gera uma id unica e seleciona os primeiros 4 caracteres
mysql_connect("localhost","root",""); //Conecta no MySQL
mysql_select_db("imagens");//Seleciona Banco de dados
$query = mysql_query("Insert into imagens (id,imagem,email) values('$uniqid','$imagem','$email')");//Insere no banco os dados da imagem
if (!$query) {
   echo 'Erro de consulta'; //Imprime a mensagem de erro em caso de erro (Ah nao jura??)
}else{
   echo "O link da sua imagem e: ".$host.$uniqid;//Imprime o link da imagem com o id
}


?>

 

Visualizar.php Acho que nao precisa nem de comentarios:

<?php
$imagem = $_GET['img'];//Pega o id
mysql_connect("localhost","root","");
mysql_select_db('imagens');
$retorno = mysql_query("Select imagem from imagens where id='$imagem'"); //Seleciona a imagem busando o id
$fetch = mysql_fetch_assoc($retorno);//joga num array
header("Content-Type: image/jpeg"); //Manda o header pro cliente informando que e uma imagem
echo $fetch['imagem'];//Exibe a mesma
?>

Voce entendeu direitinho?Quer que eu desenhe?Tem alguma duvida?Posta ai que nois resorve,tudo bem?

PS:Desculpem a falta de acentos mas meu teclado esta com problemas;

PS2:O prumodique e anaufabeto foram propositais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

vai dar erro ao subir um png e dar um echo como jpg....entao o ideal eh alem de guardar o binario, tb o tipo do arquivo e suas dimensoes (caso use em html), o tipo você imprime no header...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode até funcionar, mas a ideia é péssima.

Você inserindo o binário da imagem no banco de dados aumenta absurdamente o espaço necessário para armazenar os dados da base.

 

Uma imagenzinha comum aí com 200kB inserida uma vez, beleza...

Agora, e se fossem 100 registros? Já dá 20MB... Se forem 1000, 200MB...

O jeito "mais correto" é armazenar apenas o CAMINHO para a imagem enviada no banco de dados. No máximo, ocuparia alguns BYTES, e não KILOBYTES...

 

Anyway, vou mover para a área correta...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito bom o tutorial mais eu ainda faria algumas mudanças.... Como o Igor falou eu tbm salvaria o tipo do arquivo... mais isso vai de pessoa pra pessoa...

 

E Henrique Barcelos sistemas de hospitais e clinicas utilizam o armazenamento de imagem no banco de dados, pelo menos alguns que eu vi utilizam esse tipo de sistema.

Compartilhar este post


Link para o post
Compartilhar em outros sites
E Henrique Barcelos sistemas de hospitais e clinicas utilizam o armazenamento de imagem no banco de dados, pelo menos alguns que eu vi utilizam esse tipo de sistema.

Existir, existe, mas não é a melhor solução, não vejo motivo para isso...

Compartilhar este post


Link para o post
Compartilhar em outros sites

É um bom tutorial, mas na prática não daria muito certo ficar pegando arquivos de um servidor de banco de dados. Deve haver uma utilidade do seu script.

Mas acho que na maioria das vezes seria melhor salvar só o caminho da imagem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.