Publicidade   
 você está aqui: phpbrasil.com    artigos    artigo  
 
:: novos artigos ::

:: recomendado ::

MYSQL & MSQL

Compre esse livro no Submarino.com.br

:: publicidade ::


:: novos scripts ::

:: elenco phpbrasil ::

fccd
Pontos: 10353

Visite a página de perfil de Eduardo Lundgren (braeker)Gravando Arquivos Binários no PostgreSQL
por Eduardo Lundgren (braeker)
Lista de Categorias  |  Contribua um Novo Artigo  |  Entre em Contato Conosco

O armazenamento de arquivos em banco de dados possui vantagens em relação à organização já que tudo estaria armazenado no banco. A integridade e segurança também estariam sendo garantidas pelo SGBD, porém existem as desvantagens. Confira neste artigo quando dou todos os detalhes de como gravar
Vote aqui!
Média de Votos Atual: 8.77
Total de Votos: 13
Nota:   

O armazenamento de arquivos em banco de dados Objeto-Relacional possui vantagens em relação à organização já que tudo estaria armazenado no banco. A integridade e segurança também estariam sendo garantidas pelo SGBD, porém existem as desvantagens. É o caso de precisar do seu código para visualização do arquivo. Caso você tenha armazenado uma imagem no banco, para visualizar você teria que utilizar um script que permitisse a interpretação do binário no browser, por exemplo.

Imagine um site que possui arquivos restritos a certo grupo de usuários. Se estes arquivos estivessem armazenados diretamente no HD do servidor juntamente com os códigos html e php, você poderia utilizar um cliente FTP ou até mesmo a barra de endereço do browser para ter acesso a eles, isso se você conhecer o diretório onde os documentos se encontram. Porém com os arquivos armazenados no Banco isso não seria possível, pois o usuário precisaria de um script que acessasse a base de dados e lhe fornecesse o binário deste arquivo.

Vou utilizar no exemplo o banco de dados PostgreSQL por ser um banco Objeto-Relacional, além de ser o mais avançado banco de dados de código livre disponível.

Existem algumas maneiras de inserir códigos binários de arquivos em banco de dados não relacionais. No MySQL uma solução é o campo BLOB (Binary Large Object), porém você tem que utilizar alguns artifícios para o armazenamento. Há caracteres que são “rejeitados” por esse tipo de campo, se for inserido o binário sem que esses caracteres sejam escapados, provavelmente a integridade do arquivo será afetada.

Uma solução encontrada por mim, não sei se é a mais correta, mas foi converter pra uma tabela de criptografia mais simples, como a Base64, que transforma qualquer caractere de 8 bits num sub-grupo de 6 bits presentes na maioria das tabelas de codificação. Isso reduz a quantidade de caracteres possíveis para [A-za-z0-9+/=] que é facilmente entendido pelo campo BLOB, mas o arquivo fica salvo com um tamanho 33% maior do que numa tabela normal de 8-bits.

[Nota do Editor: O comando correto para se usar com o MySQL é o addslashes()]

No PostgreSQL também é possível usar um campo semelhante ao BLOB o ByteA. A vantagem em relação ao uso do MySQL é que para o postgresql o php possui uma função chamada pg_escape_bytea(), esta função exige PostgreSQL 7.2 ou superior, que retorna valores de byte octais prefixados por \ (ex.: \032). Os usuários devem converter de volta para binários quando quiserem recuperar os dados com o comando pg_unescape_bytea(). Desconheço se o MySQL possui um comando semelhando a este.

Vamos agora mostrar a maneira de se armazenar arquivos como objetos relacionais no PostgreSQL.



<< Anterior 1 2 3 4 Próxima >>

 
Imprimir  |  Enviar para um Amigo


Comentários de Usuários

legal mas...
publicado por Olavo Alexandrino - 2005-08-29 19:03:39

é incrivel a facilidade de 'jogar' a imagem para o banco !!

porém utilizar essa estratégia para sites de fotos por exemplo é inviável ! será um puta de um processamento para visulizar essas fotos!

o servidor com certeza nao aguentara...outro problema é que o proprio banco fica pesado!

tive oportunidade de trabalhar num site desse estilo e tinhamos Gigabytes de imagem (em disco), eram milhares de albuns e fotos! imagine essas imagens todas em BD!

apenas em poucos casos é interessante guardar imagens no banco!

e outra, o servidor Linux com Apache tem muitos recursos de segurança que 'garatem' o acesso restrito a tais imagens em disco!

;)

Certo
publicado por drui - 2005-09-02 13:08:12

Guardar imagens realmente seria uma atitude ruim. BLOB CLOB costumam armazenar documentos do tipo "Microsoft Office" (word,powerpoint...)

Agora se o caso for guardar imagens, mais prático seria utilizar o banco para armazenar as pastas de cada usuário(não o conteúdo e sim o nome do folder) e utilizar o php para buscar e exibir as imagens desse folder.

Esqueci
publicado por drui - 2005-09-02 13:09:19

Poderia ainda utilizar o access do apache pra garantir segurança.

Apagando o arquivo
publicado por Tiago Jose Monteiro Bittencour - 2006-06-05 08:08:31

Olá cara ! mto bom seu artigo !

Tipo, esse "$objeto" que você está fechando, onde você esta instanciando ele ?

see ya

Copia
publicado por Tiago Jose Monteiro Bittencour - 2006-06-05 08:09:35

E outra coisa, a cópia do arquivo ta rolando
no entando na hora de visualizar a imagem está aparecendo bugada.

O que pode ser ?

see ya !

Publique os seus Comentários

Nome:
Email:
Título:
Comentário:

NOTA: Cadastre-se no site para poder publicar comentários.

 
webmaster: João Prado Maia   © 2000 - 2005 phpbrasil.com
Gerado em 1.355 segundos