DevMedia
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login

Upload de imagens em PHP e MySQL

Veja neste artigo como fazer upload de imagens com PHP e armazená-las em um banco de dados MySQL utilizando o tipo de dados Blob.

[fechar]

Você não gostou da qualidade deste conteúdo?

(opcional) Você poderia comentar o que não lhe agradou?

Confirmo meu voto negativo

Introdução

Em muitas aplicações comerciais ou científicas é necessário que se armazenem imagens na base de dados. Apesar de muitos especialistas garantirem que é mais eficiente armazenar imagens em arquivos ao invés de tabelas, não são raros aqueles que sentem dificuldade em gerenciar arquivos fora do banco de dados. Por esta razão este artigo foi desenvolvido. Nele apresentamos uma introdução sobre o armazenamento de imagens em tabelas MySQL utilizando a linguagem PHP.

Tipos blob

Como você deve saber existe uma série de tipos de campos definidos no MySQL: inteiros, texto regular, números reais, etc. A diferença principal entre estes campos (tipos primários) e o blob é principalmente a quantidade de informação que se consegue armazenar.

Um blob é um campo binário grande que pode uma gama variada de dados. Os quatro tipos blob existentes no MySQL são: TINYBLOB, BLOB, MEDIUMBLOB, e LONGBLOB. Estes tipos diferem apenas no tamanho máximo de bytes que podem armazenar. É neste tipo de campo que armazenamos imagens no MySQL.

Criando a tabela no banco

A Listagem 1 nos mostra como criar uma tabela no MySQL que contenha um campo blob. A tabela que iremos criar se chama PESSOA e contém um ID (Chave primária) e a imagem da pessoa.

Listagem 1: Script de criação da tabela no banco

CREATE TABLE PESSOA ( 
PES_ID int NOT NULL AUTO_INCREMENT PRIMARY KEY, 
PES_IMG BLOB 
);

Inserindo a imagem na tabela criada

As Listagens 2 e 3 mostram um exemplo de formulário de upload e script PHP que armazena a iamgem recebida na tabela MySQL. Note que o form tem a propriedade enctype="multipart/form-data" e a action aponta para o arquivo PHP que salva a imagem.

Listagem 2: Formulário de upload

<html>
<head>
		<title>Upload de imagens com PHP</title>
		<meta charset="utf-8"/>
</head>
<body>
	<form action="gravar.php" method="POST" enctype="multipart/form-data">
		<label for="imagem">Imagem:</label>
		<input type="file" name="imagem"/>
		<br/>
		<input type="submit" value="Enviar"/>
	</form>
</body>
</html>

Listagem 3: Script de gravação da imagem no banco

<?php

$imagem = $_FILES["imagem"];
$host = "localhost";
$username = "root";
$password = "";
$db = "test";

if($imagem != NULL) { 
	$nomeFinal = time().'.jpg';
	if (move_uploaded_file($imagem['tmp_name'], $nomeFinal)) {
		$tamanhoImg = filesize($nomeFinal); 

		$mysqlImg = addslashes(fread(fopen($nomeFinal, "r"), $tamanhoImg)); 

		mysql_connect($host,$username,$password) or die("Impossível Conectar"); 

		@mysql_select_db($db) or die("Impossível Conectar"); 

		mysql_query("INSERT INTO PESSOA (PES_IMG) VALUES ('$mysqlImg')") or die("O sistema não foi capaz de executar a query"); 

		unlink($nomeFinal);
		
		header("location:exibir.php");
	}
} 
else { 
	echo"Você não realizou o upload de forma satisfatória."; 
} 

?>
 

Este trecho é simplesmente o necessário para se inserir uma imagem em um banco de dados MySQL. É importante que se cheque o packet size máximo configurado no servidor MySQL. Caso este valor esteja muito pequeno podem ocorrer erros de gravação do arquivo na tabela.

Exibindo as imagens gravadas anteriormente

Neste ponto já sabemos como gravar as imagens na tabela. Mas de que adianta gravarmos se não conseguirmos recuperá-las? O trecho de código para recuperação das figuras é um pouco mais complicado do que o código de armazenamento. Entretanto, não podemos considerá-lo um código extremamente complicado. As Listagens 4 e 5 mostram o código do arquivo principal de exibição das imagens e do arquivo getImagem.php, que nos retorna uma única imagem a partir do ID do cadastro.

Listagem 4: Arquivo exibir.php

<?php

$host = "localhost";
$username = "root";
$password = "";
$db = "test";

mysql_connect($host,$username,$password) or die("Impossível conectar ao banco."); 

@mysql_select_db($db) or die("Impossível conectar ao banco"); 

$result=mysql_query("SELECT * FROM PESSOA") or die("Impossível executar a query"); 

while($row=mysql_fetch_object($result)) { 
	echo "<img src='getImagem.php?PicNum=$row->PES_ID' \">"; 
} 

?>

Listagem 5: Arquivo getImagem.php

<?php
	$host = "localhost";
	$username = "root";
	$password = "";
	$db = "test";
	$PicNum = $_GET["PicNum"];

	mysql_connect($host,$username,$password) or die("Impossível conectar ao banco."); 
	@mysql_select_db($db) or die("Impossível conectar ao banco."); 
	$result=mysql_query("SELECT * FROM PESSOA WHERE PES_ID=$PicNum") or die("Impossível executar a query "); 
	$row=mysql_fetch_object($result); 
	Header( "Content-type: image/gif"); 
	echo $row->PES_IMG; 
?>

Bem, apesar do exemplo ser simples, espero ter ajudado aos iniciantes no armazenamento de imagens em bancos de dado MySQL. O código fonte de exemplo encontra-se disponível para download no topo da página.



Obteve o título de Bacharel em Ciência da Computação em 2004 pela Universidade Federal do Rio de Janeiro (IM/DCC) e o de Mestrado em 2008, pela COPPE/UFRJ. Atualmente realiza o seu Doutorado na Linha de Banco de Dados, no PESC - C [...]

O que você achou deste post?
Conhece a assinatura MVP?

Mais posts