Tutorial: Gravação de imagens em
banco de dados MySQL utilizando PHP
Tutorial: Gravação de imagens
em banco de dados MySQL
utilizando PHP
Versão 1.0 – Agosto de 2005
Pág. 1/12
Desenvolvido por Rafael Lossurdo <[email protected]>
Agosto de 2005
Tutorial: Gravação de imagens em
banco de dados MySQL utilizando PHP
INTRODUÇÃO....................................................................................................................................................3
REQUESITOS DO SISTEMA.............................................................................................................................4
VANTAGENS......................................................................................................................................................5
PASSO 1: CRIAÇÃO DOS CAMPOS NA TABELA DO MYSQL.......................................................................6
PASSO 2: ENTRADA DE DADOS DA IMAGEM VIA HTML.............................................................................7
PASSO 3: SALVAMENTO DA IMAGEM NO BANCO DE DADOS...................................................................8
PASSO 4: VISUALIZAÇÃO DA IMAGEM GRAVADA.......................................................................................9
Arquivo mostraImagem.php............................................................................................................................9
CONCLUSÕES.................................................................................................................................................10
ARQUIVOS ANEXOS.......................................................................................................................................11
classesConfig.inc.php...................................................................................................................................11
classes.inc.php..............................................................................................................................................11
Pág. 2/12
Desenvolvido por Rafael Lossurdo <[email protected]>
Agosto de 2005
Tutorial: Gravação de imagens em
banco de dados MySQL utilizando PHP
Introdução
Caro programador, resolvi escrever esse tutorial que você tem em mãos, porque demorei
um bom tempo na internet, procurando em vários lugares sem sucesso. Até é possível encontrar alguma
coisa a respeito, mas as informações são desencontradas e além de não explicar o processo completo,
desde os tipos de campos a serem criados no MySQL, explicam para um leitor que já domina o assunto.
Nessa minha pesquisa, foram raros os sites brasileiros – ou em português – que eu pude
encontrar. Logo, acredito que esse será o primeiro tutorial completo sobre este assunto, que acredito eu, é
de extrema importância a todos os programadores em PHP – e mesmo outras linguagens – assim como
designers de sites na internet.
Esclarecerei durante este explicativo os seguintes passos para a efetiva gravação e
visualização de uma imagem originária de um banco de dados:
•
Criação dos campos necessários para armazenamento da imagem e suas informações
em uma tabela no MySQL
•
Criação do módulo de preparação da imagem – envio – para ser gravada
•
Criação do módulo de gravação da imagem
•
Criação do módulo de visualização da imagem
Assim, percorreremos todos os passos para o entendimento deste assunto, tornando você
apto no desenvolvimento deste tipo de rotina.
Lembro que para implementar os procedimentos descritos neste tutorial, você deverá ter
conhecimentos de HTML , PHP e a sintaxe do banco de dados MySQL.
Espero que este tutorial seja de grande aproveitamento! Boa programação...
Pág. 3/12
Desenvolvido por Rafael Lossurdo <[email protected]>
Agosto de 2005
Tutorial: Gravação de imagens em
banco de dados MySQL utilizando PHP
Requesitos do sistema
Todos os testes e configurações foram realizados com as seguintes versões dos programas,
kernel e distribuições:
Item
Versão
Nota
PHP
4.3.10
MySQL
4.0.x
Kernel
2.4.29 e 2.6.10
Slackware Linux 10.1
Linux Ubuntu 5.04
Deve funcionar corretamente nas
versões superiores a 3.4
Acredito que independa de
distribuição
Muito útil na criação e teste das
imagens
Distribuições
PHPMyAdmin
Pág. 4/12
2.6.x
Desenvolvido por Rafael Lossurdo <[email protected]>
Agosto de 2005
Tutorial: Gravação de imagens em
banco de dados MySQL utilizando PHP
Vantagens
As vantagens da gravação de imagens diretamente como conteúdo de campos no banco de
dados MySQL são inúmeras. Visto que não é mais necessário ficar controlando o upload e exclusão delas
durante o processo de uso do sistema ao qual o banco de dados se destina.
Abaixo, estão algumas vantagens:
•
Controle total das imagens enviadas para seu site/sistema
•
O envio das imagens não depende de um serviço de FTP
•
No momento da exclusão de um registro que contém este campo de imagem, não
necessita-se acessar o diretório onde a imagem encontra-se para apagá-la, oferecendo
assim um maior controle e manutenção do site/sistema, sendo que não ficarão
armazenadas informações não utilizadas – dados perdidos; sem uso
•
Estrutura de diretórios do site/sistema mais enxuta, visto que não serão visualizados os
arquivos de imagens
•
Fácil implementação e migração desta metodologia
Dentre outras vantagens que você mesmo comprovará durante a programação.
Pág. 5/12
Desenvolvido por Rafael Lossurdo <[email protected]>
Agosto de 2005
Tutorial: Gravação de imagens em
banco de dados MySQL utilizando PHP
PASSO 1: Criação dos campos na tabela do MySQL
A seguir serão informados os campos básicos necessários para que possamos fazer a
gravação dos dados binários e as informações da imagem necessárias para visualizá-la posteriormente.
Nome dos Campos
(exemplo de nomes)
Tipo
Tamanho
binarioFoto
tipoFoto
LONGBLOB
VARCHAR
20
Preste atenção nos tipos binários diponíveis no MySQL, conforme tabela abaixo:
Tipo do Campo
Binário
Tamanho
Tamanho Máximo Permitido
para Imagem
TINYBLOB
BLOB
MEDIUMBLOB
LONGBLOB
28 bytes
216 bytes
224 bytes
232 bytes
256 bytes
64 Kbytes
16.384 Kbytes
4.194.304 Kbytes
Você deverá utilizar o campo que satisfaça sua necessidade. Caso vá criar um site onde o
cliente apenas utilizará num determinado campo logotipos que serão relativamente pequenos, verifique qual
o melhor tipo a ser utilizado, assim, você estará aumentando a agilidade de seu banco de dados no
momento da execução do SQL.
Pág. 6/12
Desenvolvido por Rafael Lossurdo <[email protected]>
Agosto de 2005
Tutorial: Gravação de imagens em
banco de dados MySQL utilizando PHP
PASSO 2: Entrada de dados da imagem via HTML
A imagem a ser gravada no banco de dados deve ser adquirida da seguinte forma:
<!-- **** Nome do arquivo: usuarios_edicao.php **** -->
<html>
<head>
<title>Entrada de Imagens</title>
</head>
<body>
<form enctype='multipart/form-data' action='usuarios_salvar.php'
method='POST'>
<input type='file' name='f_foto_usuarios' size='50'>
<input type='submit' value='Gravar'>
</form>
</body>
</html>
Lembre-se que no arquivo de configuração do PHP – php.ini – existe uma configuração
que limita o tamanho máximo do upload de arquivos por POST, além de outras informações importantes
sobre este assunto, conforme demonstro abaixo:
;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;
; Whether to allow HTTP file uploads.
file_uploads = On
; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
upload_tmp_dir = /tmp
; Maximum allowed size for uploaded files.
upload_max_filesize = 2M
No exemplo acima, o upload de arquivos por meio de POST é de 2 megabytes e o arquivo
temporário será gravado em /tmp.
Pág. 7/12
Desenvolvido por Rafael Lossurdo <[email protected]>
Agosto de 2005
Tutorial: Gravação de imagens em
banco de dados MySQL utilizando PHP
PASSO 3: Salvamento da imagem no banco de dados
No momento do salvamento da imagem, no exemplo abaixo, podemos colocar o tamanho
máximo da imagem que queremos gravar, para que o usuário não faça um upload imenso e deixe o banco
de dados “inchado”.
<?
/*
*/
**** Nome do arquivo: usuarios_salvar.php ****
// VERIFICA TAMANHO DA IMAGEM (Este teste não é obrigatório)
if(is_uploaded_file($_FILES['f_foto_usuarios']['tmp_name'])) {
if($_FILES['f_foto_usuarios']['size']>(64*1024)) { // se for maior de 64k
echo 'Arquivo de imagem deve ser menor que 64Kb!';
}
}
// INÍCIO: UPLOAD IMAGEM
if(is_uploaded_file($_FILES['f_foto_usuarios']['tmp_name'])) {
$imgData = file_get_contents($_FILES['f_foto_usuarios']['tmp_name']);
$sizeData = getimagesize($_FILES['f_foto_usuarios']['tmp_name']);
$foto_usuarios = $imgData;
$tipo_foto_usuarios = $sizeData['mime'];
/*
Neste momento você deverá fazer a gravação no banco
através do SQL respectivo, salvando nos campos
foto_usuarios com o conteúdo de $imgData
tipo_foto_usuarios com o conteúdo de $sizeData['mime']
*/
}
// FIM: UPLOAD IMAGEM
?>
Parabéns! Ao fim deste procedimento – se tudo estiver ocorrido como esperado –, você terá
a imagem gravada no banco de dados corretamente.
Pág. 8/12
Desenvolvido por Rafael Lossurdo <[email protected]>
Agosto de 2005
Tutorial: Gravação de imagens em
banco de dados MySQL utilizando PHP
PASSO 4: Visualização da imagem gravada
A exibição da imagem é muito simples, como você poderá ver abaixo:
<?
/*
*/
Início: Seu código PHP
echo "
<img
src='mostraImagem.php?id=1&table=usuarios&typeField=tipo_foto_usuarios&imgFiel
d=foto_usuarios'>
";
/*
*/
?>
Fim: Seu código PHP
Arquivo mostraImagem.php
Abaixo segue o arquivo de visualização da imagem gravada em banco de dados:
<?
/*
*/
Sintaxe:
table
id
typeField
imgField
nome da tabela onde procurar a imagem
id da imagem
nome do campo tipo da imagem
nome do campo onde está a imagem - blob
error_reporting(E_ALL);
include_once("classes.inc.php");
$db = new MySQL;
$db->open();
$sql = "SELECT *
FROM ".$_REQUEST['table']."
WHERE id_".$_REQUEST['table']."='".$_REQUEST['id']."'";
$db->query($sql);
$varTabela = $db->result(0,$_REQUEST['typeField']);
?>
header("Content-type: $varTabela");
echo $db->result(0,$_REQUEST['imgField']);
$db->close();
Pág. 9/12
Desenvolvido por Rafael Lossurdo <[email protected]>
Agosto de 2005
Tutorial: Gravação de imagens em
banco de dados MySQL utilizando PHP
Conclusões
Espero que eu tenha sido sucinto na explicação desde procedimento. Não é um processo
complicado, mas é um tanto difícil encontrar tutoriais na internet que expliquem todos os passos para a
gravação da imagem no banco de dados.
Peço para que qualquer erro que talvez eu tenha cometido na transcrição do código fonte
dos programas para este documento, me seja reportado.
Conto com a colaboração de você leitor na construção de tutoriais e disponibilização na
internet, pois assim, o conhecimento se difunde. E este é o espírito!
Um grande abraço!
Brasil, Porto Alegre, agosto de 2005.
Pág. 10/12
Desenvolvido por Rafael Lossurdo <[email protected]>
Agosto de 2005
Tutorial: Gravação de imagens em
banco de dados MySQL utilizando PHP
Arquivos Anexos
Para facilitar o aprendizado, anexei a estes procedimentos uma classe para acesso ao
banco de dados, conforme os tópicos a seguir.
classesConfig.inc.php
<?
/*
*/
by Rafael Lossurdo - [email protected]
abril/2005
- Define as variáves para conexão ao bco. de dados MySQL
- Utilizado pelo arquivo de classes classes.inc.php
define("DB_HOST","localhost");
define("DB_USERNAME","nonono");
define("DB_PASSWORD","asdfgh");
define("DB_DATABASE","nonono");
?>
//
//
//
//
host de conexão com o MySQL
nome do usuário para conexão
senha do usuário para conexão
nome do bco de dados a ser selecionado
classes.inc.php
<?
/*
Classes para acesso a bancos de dados MySQL
by Rafael Lossurdo - [email protected]
abril/2005
OBSERVAÇÕES:
Nenhuma das informações abaixo devem ser alteradas!!!
As alterações pertinentes, devem ser feitas no
arquivo classesConfig.inc.php
Classe.:
Métodos:
MySQL
open()
*** conecta com o bco de dados com as variáveis prédefinidas em classesConfig.inc.php
close()
*** fecha a conexão com o bco de dados
query( string SQL )
*** executa uma string SQL
linhas()
*** retorna quantas linhas aquela query resultou
result( linha a ser mostrada, campo a ser mostrado )
*** retorna o conteúdo do campo e linha escolhidos
*/
include "classesConfig.inc.php"; // variáveis do bco. de dados
class MySQL {
var $db;
var $query;
Pág. 11/12
Desenvolvido por Rafael Lossurdo <[email protected]>
Agosto de 2005
Tutorial: Gravação de imagens em
banco de dados MySQL utilizando PHP
function open() {
$this->db = @mysql_connect(DB_HOST, DB_USERNAME, DB_PASSWORD);
if(!$this->db) { echo "Erro na conexão!"; }
if(!@mysql_select_db(DB_DATABASE)) { echo "Erro na seleção do banco
de dados!"; }
}
function close() {
@mysql_close($this->$db);
}
function query( $sql ) {
$this->query = @mysql_query( $sql, $this->db );
return $this->query;
}
function linhas() {
return @mysql_num_rows( $this->query );
}
}
?>
function result( $linha, $campo ) {
return @mysql_result( $this->query, $linha, $campo );
}
Pág. 12/12
Desenvolvido por Rafael Lossurdo <[email protected]>
Agosto de 2005
Download

Tutorial: Gravação de imagens em banco de dados MySQL