2014-09-29 78 views
4

我有PHP代码可以同时上传多个文件。目前我正在使用name_timestamp模式作为文件名 - 以保持唯一性。现在需要的是,假设我上传了两次沙漠图片(内容保持不变),那么将有2个条目与该时间戳。 例如:多个图片上传后的唯一名称

Desert_201409281000.jpg 
Desert_201409282000.jpg 

是否有可能像显示照片1只为这一些独特的名字吗?

我试着用JQuery做这个,但我想要一个PHP解决方案。

+0

当保存在你的PHP代码的文件,或许检查该文件在保存之前首先存在。您可以在添加时间戳后立即执行此操作。 – RDL 2014-09-29 18:19:45

+0

Desert_201409281000.jpg Desert_201409282000.jpg为什么这样的名字?他们会一直这样吗? – vks 2014-09-29 18:22:04

+0

我不明白这个问题。这部分'是否有可能为此仅显示一些像PHOTO1这样的独特名称?'详细阐述一下。如果你想要唯一性,试着将'uniqid()'和你现在使用的**结合起来,**如果**那就是你所要求的。 **编辑:**我认为BojanT提到的,可能是你需要使用/做的。 – 2014-09-29 18:23:58

回答

0

你是如何上传图片?

  • 如果通过外部URL,那么你可以只检查是否有重复的URL

  • 如果从计算机,那么你可以使用一些PHP库中是否有重复的图像,然后应用时间戳和方式将文件重命名为单个Photo1.jpg文件...

  • 我相信你需要时间戳,如果没有,那么很明显,时间戳图像列表中图像的第一次出现可以保留为所有人的名字重复!

而且,寻找一个PHP的解决方案来复制图像文件后,我找到了这个网页:::: link :::]

本页面显示,PHP有一个叫做MD5的内置功能,来检查的MD5值的任何文件。如果您将md5文件名存储在SQL中,那么在PHP中,您可以搜索SQL表中上载文件的md5值的任何匹配项,并根据您的要求重命名文件。

下面就来验证从MYSQL表中的MD5值代码:

$sign = md5(file_get_contents($filename)); //This will create an unique md5 signature for every picture 

//You could now store that hash in your database and check for duplicates at every upload 
$results = mysql_query("SELECT file FROM images WHERE signature=" . $sign); 
if ($row = mysql_fetch_array($results)) { 
    //Duplicate found, $row['file'] contains name 
} 

如所建议的,你也可以使用:$sign = md5_file($filename);sha1

+0

是否可以仅处理数组...像映射如果有任何匹配的数组键值与数值相符,将显示PHOTO 1。 – 2014-10-07 18:04:23

+0

我不确定你的意思是用值映射数组......我想你可以用for循环来做到这一点。 – mk117 2014-10-07 18:09:56