【发布时间】:2015-04-22 09:00:08
【问题描述】:
将 base64_encode 转换为二进制数据,例如
9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8
我可以带一些字符来检查重复吗?我可以为视频做同样的事情吗?
【问题讨论】:
标签: php image duplicates
将 base64_encode 转换为二进制数据,例如
9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8
我可以带一些字符来检查重复吗?我可以为视频做同样的事情吗?
【问题讨论】:
标签: php image duplicates
就像其他人所说的那样,不要使用 Base64 作为比较文件的方法,使用 SHA1 之类的东西会便宜得多,特别是如果您将其用于视频。 See the sha1_file function
例如,如果您已经有一个 SHA1 和,则很容易比较:
if ($storedSHA1 == sha1_file($newImage)){
// ...some rejection code
}
我建议创建一个数据库表来存储您上传的每个文件的名称、大小和 SHA1。然后您可以运行一个简单的查询来检查是否有任何记录匹配。如果您的数据库中有匹配项,您就知道您有重复项。
请参阅下面的 MySQL 查询。
SELECT SHA1_hash FROM Uploads
WHERE SHA1_hash = '<hashOfIncomingImage>';
【讨论】:
不,你没有。使用digest 进行重复检查。 SHA1 是足够好的选择。与 base64 相比,它具有恒定且较小的占用空间。 Base64 适用于传输或交换二进制数据,仅此而已。此外,base64 比二进制数据大 1/3 左右。
【讨论】:
您想为此使用哈希函数,例如 Sha1。它总是返回一个 40 个字符,您可以用来比较。
【讨论】: