SALVA FOTO no BD

2 respostas
php
S

Bom dia Feliz 2017 a todos.

Alguém poderia me ajudar? Preciso alterar um arquivo para salvar foto no BD.
Esse arquivo já salva a foto na pasta, mas meu problema é que antes de salvar ele converte o nome da foto em um codigo md5 e salva assim na pasta foto. Para que eu possa puxar e exibir a foto relativa ao produto acredito que preciso salvar esse codigo md5 no BD (dados do produto) ou melhor seria Não usar o md5 e guardar tanto na pasta quanto no BD a foto do produto com o nome Original da foto
Segue o arquivo: Obrigado.

<?php

// Recuperando imagem em base64
// Exemplo: data:image/png;base64,AAAFBfj42Pj4
$imagem = $_POST[‘imagem’];

// Separando tipo dos dados da imagem
// $tipo: data:image/png
// $dados: base64,AAAFBfj42Pj4
list($tipo, $dados) = explode(’;’, $imagem);

// Isolando apenas o tipo da imagem
// $tipo: image/png
list(, $tipo) = explode(’:’, $tipo);

// Isolando apenas os dados da imagem
// $dados: AAAFBfj42Pj4
list(, $dados) = explode(’,’, $dados);

// Convertendo base64 para imagem
$dados = base64_decode($dados);

// Gerando nome aleatório para a imagem
$foto = md5(uniqid(time()));

// Salvando imagem em disco
file_put_contents("…/img/{$foto}.jpg", $dados);

2 Respostas

P

Ola

o md5 não é má ideia.

é uma forma de gerar um identificador unico para a imagem se for baseado no conteudo do mesmo (nesse caso, quanto maior a foto, mais tempo vai levar, pode não ser la muito agradavel esperar) E se alguem subir a mesma imagem 50 vezes vc tera apenas um arquivo fisico.

agora perceba que vc esta aplicanto md5 no resultado do uniqid, e vc usa o resultado de time para isso. por que?

http://php.net/manual/en/function.uniqid.php

uniqid ja usa o tempo atual internamente. vc pode simplesmente usar uniqid ( quando vc passa um argumento, isso é considerado o “prefixo”, não é tipo uma semente/seed ). o md5 vai criar um ‘formato’ e isso vai ser bem esquisito por conta das colisões.

resumo: usa só uniqid meu filho.

agora sobre onde salvar o arquivo: é sempre uma má ideia salvar arquivos no banco de dados. vc precisa de uma situação realmente singular para que isso valha a pena. banco de dados em geral é o gargalo de uma aplicação web e vc não precisa servir arquivos SE vc pode armazenar em um diretorio ( ou hash de diretorios, caso vc pretenda ter muitos arquivos ). servidores web como apache e nginx sabem servir conteudo estatico muito bem e se vc souber configurar os cabeçalhos http corretos é facilmente cacheavel ( seja no browser, seja num varnish ou cloudflare ).

agora eu não sou o dono da verdade. mas depois de 7 milhões de fotos em 7 diferentes tamanhos armazenados em um oracle depois de anos foi uma fonte de pesadelos que vc não faz ideia.

S

Muito obrigado pelas dicas Peczenyj.

Este sistema de foto eu consegui na internet e estou tentando adaptar ao projeto. Vou fazer as alterações que você sugeriu.

Porém se puderes me ajudar mais um pouco. O usuário pode não cadastrar a foto no momento do cadastro do produto. Se ele fizer o cadastro depois, como eu consigo ligar o id md5 da foto com o produto?

abraços

Criado 2 de janeiro de 2017
Ultima resposta 2 de jan. de 2017
Respostas 2
Participantes 2