Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
上载PHP文件时生成唯一文件名的最佳方法_Php_Image_Upload_Unique_Identifier - Fatal编程技术网

上载PHP文件时生成唯一文件名的最佳方法

上载PHP文件时生成唯一文件名的最佳方法,php,image,upload,unique,identifier,Php,Image,Upload,Unique,Identifier,有谁能建议为文件上载生成唯一的文件名以避免重复的最佳做法吗 参赛作品 提前感谢。您可以使用文件上载时的unix时间戳。如果希望同时进行多个上载,则可以附加唯一的用户ID或原始文件名的一部分。我通常使用uniqid()函数为文件名创建UID,或者使用上载文件的用户名创建文件夹并保留原始文件名。第一种方法的缺点是,您必须将原始文件名保存在某个位置以显示给用户。$username.$timestamp.$randomNumber 或者,如果您不想让人们知道该文件的上传时间和上传人的详细信息,您也可以将

有谁能建议为文件上载生成唯一的文件名以避免重复的最佳做法吗 参赛作品


提前感谢。

您可以使用文件上载时的unix时间戳。如果希望同时进行多个上载,则可以附加唯一的用户ID或原始文件名的一部分。

我通常使用uniqid()函数为文件名创建UID,或者使用上载文件的用户名创建文件夹并保留原始文件名。第一种方法的缺点是,您必须将原始文件名保存在某个位置以显示给用户。

$username.$timestamp.$randomNumber


或者,如果您不想让人们知道该文件的上传时间和上传人的详细信息,您也可以将其散列,如果您想创建文件,或者。

此函数可能有助于:

您还可以考虑使用文件内容的散列,例如:

类似这样的内容:

$filename = md5(date('Y-m-d H:i:s:u'));

由于MD5哈希不能保证是唯一的,所以最好使用file_exists($filename)检查冲突。在这种情况下,请重新运行上述操作。

最安全的方法是使用递增计数器。@Pekka如何使用计数器上载图像?将其用作文件名并在末尾添加扩展名。这里有一个.jpg图像的例子:hash('ripemd160',time().mt_rand(101000))。.jpg“,所以它基本上是unix时间,以秒为单位,+一个10到1000之间的随机数,然后它都被编码到一个hash字符串中,当使用hash作为文件名时要小心冲突。最好使用带有随机字符串的散列。好主意,microtime()对于单用户情况非常好。散列不是唯一的。@afilina为什么散列不是唯一的?可能会与MD5或任何散列函数发生冲突,但大多数情况下不太可能。我最初的回应是从2010年开始的。使用sha256,碰撞的可能性非常非常低@JamesP。把散列想象成电影的一句话摘要。多部电影可以有相同的摘要。建议的代码
$filename=md5(日期('Y-m-d H:i:s:u')似乎不起作用。在PHP文档中:“注意date()将始终生成000000,因为它需要一个整数参数”Test:
echo date('Y-m-dh:i:s:u')输出:
2019-03-22 07:30:28:000000
更好的解决方案是:
$date=DateTime::createFromFormat('U.U',microtime(TRUE))$filename=md5($date->format('Y-m-dh:i:s:u'))