php随机名称

时间:2009-09-28 17:25:50

标签: php

HI

为文件夹创建随机名称的最佳方法是什么?

它将用于存储文档的文件夹名称。但是会创建很多文件夹,因此每次都需要它是唯一的。

长度应该大约为7个字符。

10 个答案:

答案 0 :(得分:13)

您也可以尝试使用PHP的uniqid(),并将参数more_entropy设置为true。

或只是sha1( microtime() )

答案 1 :(得分:5)

如果它需要是唯一的,那么我会忘记它是随机的,只是增加一个计数器。如果需要将文件夹的内容与数据库中的记录相关联,那就更好了。您可以在数据库中使用自动增量列,并将其用作文件夹名称的一部分。

答案 2 :(得分:3)

这是我使用的功能:

function makeRandomString($max=6) {
    $i = 0; //Reset the counter.
    $possible_keys = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    $keys_length = strlen($possible_keys);
    $str = ""; //Let's declare the string, to add later.
    while($i<$max) {
        $rand = mt_rand(1,$keys_length-1);
        $str.= $possible_keys[$rand];
        $i++;
    }
    return $str;
}
编辑:正如比尔蜥蜴说的那样,你最好添加一些反击。尽管不太可能,但可能会创建两次相同的字符串。

答案 3 :(得分:2)

7 char文件夹名称是一个硬性规则(限制的原因是什么)?

我使用YYYYmmDDHHMMSS(如果你发现自己发生了很多碰撞,则加上毫秒)。

其中

  • YYYY =四位数日期
  • mm =两位数月份
  • DD =两位数日
  • HH =两位数(24小时)小时
  • MM =两位数分钟
  • SS =两位数秒

您可能还想测试是否已创建目录,然后再次尝试睡眠一段随机的毫秒数。

PHP代码:

<?php
$dirName = date( 'YmdHis', time() );
@mkdir( $dirName )
?>

答案 4 :(得分:1)

你真的需要它是随机的吗?

如果你需要它是唯一的我建议创建一个计数器并将整数转换为十六进制甚至更好的基数36(26个字符+10个数字)。 创建文件夹后,增加计数器,你就可以了。

答案 5 :(得分:1)

php有一个标准函数,tmpnam就是这样做的;它会创建一个唯一的文件名(实际上会创建该文件,但可以删除并稍后用作文件夹)。

答案 6 :(得分:0)

要求它是唯一的7个字符我可能会使用一个编号为36(0-9和az)的数字,这样你就可以看到最后一个文件夹是什么,并增加它来创建一个新的之一。

答案 7 :(得分:0)

“rh”。 mt_rand(10000,99999)

然后检查它是否是唯一的,如果不是则重新生成。在某种程度上,这比保存状态更好,就像一个计数器,因为少可能出错。

do {
  $f = "rh" . mt_rand(10000,99999);
} while (file_exists($f));

答案 8 :(得分:0)

我认为命名的最佳方法是使用uniqid()函数。

$folder_name = uniqid();// eg: 4b3403665fea6

或使用静态前缀:

$folder_name = uniqid('folder_'));// eg: folder_537834f6e981a

或今天(日期)前缀:

$folder_name = uniqid(date('h-i-s')._); //eg: 04-23-59_537835dff2017

答案 9 :(得分:0)

在此示例中,我们可以查找具有最小和最大长度的随机密钥。

substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, $length)