生成唯一的文件名

Jam*_*son 5 php random filenames

我想为上传的文件生成唯一的文件名.它们的长度应为5个字符,并且仅包含以下字符:abcdefghijklmnopqrstuvwxyz0123456789.这是我的代码:

$chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
$length = 5;
$filename = '';
for($i = 0; $i < $length; $i++)
{
    $filename += $chars[mt_rand(0, 36)];
}

echo $filename;
Run Code Online (Sandbox Code Playgroud)

但我总是以1或2个字符长整数结束,从不使用任何字符串字符.如果我运行此代码:

$chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
$length = 5;
$filename = '';
for($i = 0; $i < $length; $i++)
{
    echo $chars[mt_rand(0, 36)];
}
Run Code Online (Sandbox Code Playgroud)

它工作正常,我得到以下输出:8iwzf.

我在这里做错了什么?谢谢!

fre*_*ed2 14

5个字符不会给你很多"唯一性"(熵),因此你冒着重复文件名的风险.

为什么不用

$filename = uniqid();
Run Code Online (Sandbox Code Playgroud)

您可以通过添加前缀和其他内容来添加熵,以使重复的可能性(在现实世界中)为零.


小智 9

您正在添加(+ =).您想使用点连接字符串.

$filename .= $chars[mt_rand(0, 36)];

  • 哦,耶稣.我花了太多时间使用Javascript.谢谢 :) (5认同)