Gravando Imagens no banco de dados mysql com php

Gravando Imagens no banco de dados mysql com php

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/12Desenvolvido por Rafael Lossurdo <rafael@dicaslinux.com.br>Agosto de 2005

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

INTRODUÇÃO3
REQUESITOS DO SISTEMA4
VANTAGENS5
PASSO 1: CRIAÇÃO DOS CAMPOS NA TABELA DO MYSQL6
PASSO 2: ENTRADA DE DADOS DA IMAGEM VIA HTML7
PASSO 3: SALVAMENTO DA IMAGEM NO BANCO DE DADOS8
PASSO 4: VISUALIZAÇÃO DA IMAGEM GRAVADA9
Arquivo mostraImagem.php9
CONCLUSÕES10
ARQUIVOS ANEXOS1
classesConfig.inc.php1
classes.inc.php1

Pág. 2/12Desenvolvido por Rafael Lossurdo <rafael@dicaslinux.com.br>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/12Desenvolvido por Rafael Lossurdo <rafael@dicaslinux.com.br>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:

MySQL4.0.xDeve funcionar corretamente nas versões superiores a 3.4

DistribuiçõesSlackware Linux 10.1 Linux Ubuntu 5.04

Acredito que independa de distribuição

PHPMyAdmin2.6.xMuito útil na criação e teste das imagens

Pág. 4/12Desenvolvido por Rafael Lossurdo <rafael@dicaslinux.com.br>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/12Desenvolvido por Rafael Lossurdo <rafael@dicaslinux.com.br>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)TipoTamanho binarioFoto LONGBLOB - tipoFoto VARCHAR 20

Preste atenção nos tipos binários diponíveis no MySQL, conforme tabela abaixo:

Tipo do CampoBinárioTamanhoTamanho Máximo Permitido para Imagem

TINYBLOB28 bytes256 bytes

BLOB216 bytes64 Kbytes

MEDIUMBLOB224 bytes16.384 Kbytes LONGBLOB232 bytes4.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/12Desenvolvido por Rafael Lossurdo <rafael@dicaslinux.com.br>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/12Desenvolvido por Rafael Lossurdo <rafael@dicaslinux.com.br>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”.

// 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/12Desenvolvido por Rafael Lossurdo <rafael@dicaslinux.com.br>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'>

Arquivo mostraImagem.php

Abaixo segue o arquivo de visualização da imagem gravada em banco de dados:

tablenome da tabela onde procurar a imagem idid da imagem typeFieldnome do campo tipo da imagem imgFieldnome 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/12Desenvolvido por Rafael Lossurdo <rafael@dicaslinux.com.br>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/12Desenvolvido por Rafael Lossurdo <rafael@dicaslinux.com.br>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 - rafael@dicaslinux.com.br 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");// host de conexão com o MySQL define("DB_USERNAME","nonono");// nome do usuário para conexão define("DB_PASSWORD","asdfgh");// senha do usuário para conexão define("DB_DATABASE","nonono");// nome do bco de dados a ser selecionado ?> classes.inc.php

Classes para acesso a bancos de dados MySQL by Rafael Lossurdo - rafael@dicaslinux.com.br abril/2005

Nenhuma das informações abaixo devem ser alteradas!!! As alterações pertinentes, devem ser feitas no arquivo classesConfig.inc.php

Classe.: MySQL Métodos: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. 1/12Desenvolvido por Rafael Lossurdo <rafael@dicaslinux.com.br>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/12Desenvolvido por Rafael Lossurdo <rafael@dicaslinux.com.br>Agosto de 2005

Comentários