PHP为文件上传生成随机目录

时间:2019-05-31 12:39:15

标签: php

我需要为用户文件上传生成随机目录。 为此使用以下功能是否明智?

hash('md5', time())

我不希望PHP篡改文件名,这就是为什么我考虑为此使用目录。

3 个答案:

答案 0 :(得分:0)

也许您可以使用自动递增来确保永远不会两次获得相同的目录名称:

$i = file_get_contents('increment.txt');
file_put_contents( $i + 1, 'increment.txt' );

// Then use $i as the directory name

// Or if you want the dirname to be less easily guessed:
$dirname = md5(microtime(true) . $filename) . $i;

答案 1 :(得分:0)

您可以像现在一样使用基于时间的方法,但是使用微时间而不是时间是更明智的选择,因为熵较大,因此发生碰撞的可能性较小。

一种更好的方法是生成一个真正唯一的ID。您可以将内置的uniqid函数(https://www.php.net/manual/en/function.uniqid.php)与Extra Entropy选项结合使用,或者将出色的ramsey / uuid库(https://github.com/ramsey/uuid)用于基于RFC 4122标准生成强大的唯一标识符。此处发生碰撞的机会很小,几乎不存在(请参阅:https://en.wikipedia.org/wiki/Universally_unique_identifier#Collisions)。

您可以使用增量方法,在其中存储/检索已经存在的目录数量,但这将意味着您的文件系统有额外的负载,并且您错过了异步创建多个目录的可能性。

祝你好运!

答案 2 :(得分:0)

您要处理多少个用户和文件? 请记住,同一文件夹中存在许多文件/文件夹的影响:如果同一目录中有几百或数千个文件,则使用该目录会变慢。 我的建议:将生成的哈希表分成几部分,并创建目录结构,如下所示: /uploads/user/f4/a9/f4a94637deabc55/file.jpg