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 <rafael@dicaslinux.com.br>

Agosto de 2005

...................8 PASSO 4: VISUALIZAÇÃO DA IMAGEM GRAVADA.......Tutorial: Gravação de imagens em banco de dados MySQL utilizando PHP INTRODUÇÃO..............................................10 ARQUIVOS ANEXOS.........................6 PASSO 2: ENTRADA DE DADOS DA IMAGEM VIA HTML.........................................................3 REQUESITOS DO SISTEMA.............................................................................................................................inc.............................11 classes....7 PASSO 3: SALVAMENTO DA IMAGEM NO BANCO DE DADOS.........9 CONCLUSÕES.........................................................................com.....................................................................................................................................................php.......................................................................................................................................11 classesConfig....................................................................................................................................................9 Arquivo mostraImagem................................................................... 2/12 Desenvolvido por Rafael Lossurdo <rafael@dicaslinux...............................br> Agosto de 2005 ........................................4 VANTAGENS.........................................................inc.............................................................................................................5 PASSO 1: CRIAÇÃO DOS CAMPOS NA TABELA DO MYSQL...............php..........php....... 1 1 Pág.........................................................................................................................................................................................................................................................

você deverá ter conhecimentos de HTML . Nessa minha pesquisa. Espero que este tutorial seja de grande aproveitamento! Boa programação. explicam para um leitor que já domina o assunto. desde os tipos de campos a serem criados no MySQL. resolvi escrever esse tutorial que você tem em mãos. que acredito eu. tornando você apto no desenvolvimento deste tipo de rotina. Logo.. procurando em vários lugares sem sucesso.. Até é possível encontrar alguma coisa a respeito.br> Agosto de 2005 . mas as informações são desencontradas e além de não explicar o processo completo. Lembro que para implementar os procedimentos descritos neste tutorial. 3/12 Desenvolvido por Rafael Lossurdo <rafael@dicaslinux. acredito que esse será o primeiro tutorial completo sobre este assunto.com.Tutorial: Gravação de imagens em banco de dados MySQL utilizando PHP Introdução Caro programador. porque demorei um bom tempo 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. Pág. PHP e a sintaxe do banco de dados MySQL. foram raros os sites brasileiros – ou em português – que eu pude encontrar. é de extrema importância a todos os programadores em PHP – e mesmo outras linguagens – assim como designers de sites na internet.

4 Acredito que independa de distribuição Muito útil na criação e teste das imagens Pág.4.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.x Nota Deve funcionar corretamente nas versões superiores a 3. kernel e distribuições: Item PHP MySQL Kernel Distribuições PHPMyAdmin Versão 4.29 e 2.04 2.1 Linux Ubuntu 5.10 4.br> Agosto de 2005 .com.10 Slackware Linux 10.6.3.6.x 2. 4/12 Desenvolvido por Rafael Lossurdo <rafael@dicaslinux.0.

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. 5/12 Desenvolvido por Rafael Lossurdo <rafael@dicaslinux. 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.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. sendo que não ficarão armazenadas informações não utilizadas – dados perdidos. oferecendo assim um maior controle e manutenção do site/sistema. 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.br> Agosto de 2005 .com. sem uso • • Estrutura de diretórios do site/sistema mais enxuta. Pág. Abaixo. não necessita-se acessar o diretório onde a imagem encontra-se para apagá-la.

conforme tabela abaixo: Tipo do Campo Binário TINYBLOB BLOB MEDIUMBLOB LONGBLOB Tamanho 28 bytes 216 bytes 224 bytes 232 bytes Tamanho Máximo Permitido para Imagem 256 bytes 64 Kbytes 16. você estará aumentando a agilidade de seu banco de dados no momento da execução do SQL.com. Caso vá criar um site onde o cliente apenas utilizará num determinado campo logotipos que serão relativamente pequenos. Pág. assim.br> Agosto de 2005 . verifique qual o melhor tipo a ser utilizado.194. Nome dos Campos (exemplo de nomes) binarioFoto tipoFoto Tipo LONGBLOB VARCHAR Tamanho 20 Preste atenção nos tipos binários diponíveis no MySQL.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.304 Kbytes Você deverá utilizar o campo que satisfaça sua necessidade.384 Kbytes 4. 6/12 Desenvolvido por Rafael Lossurdo <rafael@dicaslinux.

.. File Uploads ...com.... além de outras informações importantes sobre este assunto. file_uploads = On . upload_tmp_dir = /tmp .**** Nome do arquivo: usuarios_edicao.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....br> Agosto de 2005 .... Temporary directory for HTTP uploaded files (will use system default if not .. Whether to allow HTTP file uploads.....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: <!-.. 7/12 Desenvolvido por Rafael Lossurdo <rafael@dicaslinux. Pág...ini – existe uma configuração que limita o tamanho máximo do upload de arquivos por POST... upload_max_filesize = 2M No exemplo acima.... Maximum allowed size for uploaded files. .. o upload de arquivos por meio de POST é de 2 megabytes e o arquivo temporário será gravado em /tmp. . specified).. . conforme demonstro abaixo: .php **** --> <html> <head> <title>Entrada de Imagens</title> </head> <body> <form enctype='multipart/form-data' action='usuarios_salvar...

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 –. } } // INÍCIO: UPLOAD IMAGEM if(is_uploaded_file($_FILES['f_foto_usuarios']['tmp_name'])) { $imgData = file_get_contents($_FILES['f_foto_usuarios']['tmp_name']). /* Neste momento você deverá fazer a gravação no banco através do SQL respectivo. $tipo_foto_usuarios = $sizeData['mime'].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!'. $sizeData = getimagesize($_FILES['f_foto_usuarios']['tmp_name']).br> Agosto de 2005 . $foto_usuarios = $imgData. você terá a imagem gravada no banco de dados corretamente. no exemplo abaixo. para que o usuário não faça um upload imenso e deixe o banco de dados “inchado”. 8/12 Desenvolvido por Rafael Lossurdo <rafael@dicaslinux.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. <? /* */ **** Nome do arquivo: usuarios_salvar. Pág. podemos colocar o tamanho máximo da imagem que queremos gravar.com.

php?id=1&table=usuarios&typeField=tipo_foto_usuarios&imgFiel d=foto_usuarios'> ".br> Agosto de 2005 .$_REQUEST['id'].inc. $db->open(). $db = new MySQL."'". ?> Pág. $varTabela = $db->result(0."='"." WHERE id_".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 .com.$_REQUEST['imgField']).$_REQUEST['typeField']).$_REQUEST['table']. include_once("classes. 9/12 Desenvolvido por Rafael Lossurdo <rafael@dicaslinux.php"). header("Content-type: $varTabela"). /* */ ?> Fim: Seu código PHP Arquivo mostraImagem.$_REQUEST['table'].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. $db->query($sql). como você poderá ver abaixo: <? /* */ Início: Seu código PHP echo " <img src='mostraImagem. echo $db->result(0. $db->close(). $sql = "SELECT * FROM ".blob */ error_reporting(E_ALL).

mas é um tanto difícil encontrar tutoriais na internet que expliquem todos os passos para a gravação da imagem no banco de dados. Não é um processo complicado.br> Agosto de 2005 . E este é o espírito! Um grande abraço! Brasil. Peço para que qualquer erro que talvez eu tenha cometido na transcrição do código fonte dos programas para este documento. Conto com a colaboração de você leitor na construção de tutoriais e disponibilização na internet. agosto de 2005. 10/12 Desenvolvido por Rafael Lossurdo <rafael@dicaslinux. me seja reportado. o conhecimento se difunde. Porto Alegre.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.com. Pág. pois assim.

11/12 Desenvolvido por Rafael Lossurdo <rafael@dicaslinux. define("DB_PASSWORD". // variáveis do bco.php Classe.br abril/2005 OBSERVAÇÕES: Nenhuma das informações abaixo devem ser alteradas!!! As alterações pertinentes. define("DB_DATABASE".inc. anexei a estes procedimentos uma classe para acesso ao banco de dados.br> Agosto de 2005 .php // // // // 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 */ define("DB_HOST". Pág."asdfgh").php <? /* by Rafael Lossurdo .rafael@dicaslinux. campo a ser mostrado ) *** retorna o conteúdo do campo e linha escolhidos */ include "classesConfig.: Métodos: MySQL open() *** conecta com o bco de dados com as variáveis prédefinidas em classesConfig.Tutorial: Gravação de imagens em banco de dados MySQL utilizando PHP Arquivos Anexos Para facilitar o aprendizado.inc.Utilizado pelo arquivo de classes classes.php".php <? /* Classes para acesso a bancos de dados MySQL by Rafael Lossurdo . conforme os tópicos a seguir.inc. de dados class MySQL { var $db.inc.br abril/2005 . devem ser feitas no arquivo classesConfig. var $query.com.Define as variáves para conexão ao bco.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. classesConfig.inc.com."nonono").inc.rafael@dicaslinux. ?> classes. de dados MySQL ."nonono")."localhost"). define("DB_USERNAME".com.

return $this->query. $campo ). DB_USERNAME.br> Agosto de 2005 . 12/12 Desenvolvido por Rafael Lossurdo <rafael@dicaslinux. DB_PASSWORD). } } ?> Pág. } } function close() { @mysql_close($this->$db). } if(!@mysql_select_db(DB_DATABASE)) { echo "Erro na seleção do banco de dados!". } function result( $linha. $this->db ). $campo ) { return @mysql_result( $this->query.com. $linha. } function query( $sql ) { $this->query = @mysql_query( $sql. if(!$this->db) { echo "Erro na conexão!".Tutorial: Gravação de imagens em banco de dados MySQL utilizando PHP function open() { $this->db = @mysql_connect(DB_HOST. } function linhas() { return @mysql_num_rows( $this->query ).