Eu tenho um site de vídeos. Sempre que um arquivo é carregado, ele precisa ser comparado com todos os outros arquivos (vídeos) existentes para garantir que não seja duplicado.
Considerando que a cada upload o número de arquivos a serem comparados aumenta, estou procurando uma solução que seja relativamente rápida.
Idealmente, isso será executado usando shell_exec
from php, portanto, deverá retornar algum tipo de saída se o arquivo já existir (um simples 0 ou 1 servirá).
Eu sei cmp
, diff
mas temo que, com o número de arquivos existentes, isso seja bastante lento.
Existem outras soluções que devo procurar?
Responder1
Você pode calcular a soma de verificação do arquivo para cada vídeo e classificar a lista de valores. Aqueles que possuem a mesma soma de verificação são o mesmo arquivo.
Para acelerar o processo, você pode filtrar o arquivo por aquele que tenha o mesmo tamanho (alguns kb como DELTA podem ser suficientes), então você pode calcular o hash apenas para este conjunto de arquivos
Responder2
Calcule a soma de verificação/hash ( sha1sum
) de todos os seus vídeos e mantenha a lista de somas de verificação em um arquivo ou banco de dados.
Ao receber um novo arquivo:
- calcular sua soma de verificação/hash
- procure esta soma de verificação na lista/DB
- se encontrado, rejeite
- se não for encontrado, aceite e adicione a soma de verificação à lista/banco de dados
Se você mantiver a soma de verificação como uma coluna adicional no banco de dados, uma restrição de unicidade na coluna da soma de verificação poderá ser usada para descobrir se já existe um arquivo com a soma de verificação e falhará automaticamente em sua adição ao banco de dados.
PS: dito isto, é bastante fácil editar o campo de comentários em um MP4 para que pareça um vídeo diferente.