从uniqid只返回4个字符

时间:2017-09-24 13:35:43

标签: php

目前我正在使用以下代码为我上传的文件生成随机名称。

$file_upload_name = uniqid('', true) . '.' . $file_type; 

这会返回类似于59c7b4868f4776.27613088.mp3的内容,如何将其转换为类似5vh2.mp3的内容,以便在呈现给用户时看起来更干净?

2 个答案:

答案 0 :(得分:2)

编辑:评论中salathe的一个好点:

  

uniqid()返回值的前8个字符(减去任何提供的前缀)表示函数调用时的Unix时间戳。仅使用前4个字符意味着该值每2 ^ 16秒(约18小时)仅更改一次。例如,如果此代码在2017-09-24T00:44:48Z和2017-09-24T18:57:03Z之间(包括)之间的任何时间执行,它将返回相同的"唯一的"值。

可能只有四个字符会发生碰撞问题,因为前4个值只会在每18个小时左右发生变化(假设您在18小时内至少调用此脚本两次)。

使用最后四个字符会更加独特'。 如果您需要使用uniq功能,可以使用substr功能。

$unique = uniqid('', true);
$file_name = substr($unique, strlen($unique) - 4, strlen($unique));
$file_upload_name = $file_name . "." . $file_type;

请注意,只有四个字符的视频会降低视频ID的唯一性,并会增加生成的文件名的冲突率。

答案 1 :(得分:0)

这应该给你一个独特的四个字符名称 它会生成一个随机名称,看它是否已经存在,如果它确实生成了新的名称 否则回应它。

$chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$shuffled = substr(str_shuffle($chars),0,4);
While(file_exists($shuffled.".mp3"){
    $shuffled = substr(str_shuffle($chars),0,4);
}

Echo $shuffled.".mp3";