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

Ada*_*ski 26 php upload image unique identifier

任何人都可以建议为文件上传生成唯一文件名以避免重复条目的最佳做法吗?

提前致谢.

ryu*_*ice 31

我通常使用uniqid()函数为文件名创建一个UID,或者创建一个文件夹,其中包含上传文件的用户名和保留原始文件名.第一个缺点是你必须将原始文件名保存在某个地方以便向用户显示.


Kev*_*ock 7

此功能可能有所帮助:

http://php.net/manual/en/function.uniqid.php

您还可以考虑使用文件内容的哈希值,例如:

http://php.net/manual/en/function.sha1-file.php

  • 当使用哈希作为文件名时要当心冲突。最好使用带有随机字符串的哈希值。 (2认同)

Col*_*ell 5

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


cni*_*ini 5

像这样:

$filename = md5(date('Y-m-d H:i:s:u'));
Run Code Online (Sandbox Code Playgroud)

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

  • 哈希不是唯一的。 (9认同)
  • 建议的代码 `$filename = md5(date('Ymd H:i:s:u'));` 似乎不起作用。来自 PHP 文档:“注意 date() 将始终生成 000000,因为它需要一个整数参数”测试:`echo date('Ymd H:i:s:u');` 输出:`2019-03-22 07 :30:28:000000` 更好的解决方案是:`$date = DateTime::createFromFormat('U.u', microtime(TRUE)); $filename = md5($date->format('Ymd H:i:s:u')));` (2认同)