SALVA FOTO no BD

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);

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.

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