微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

uniqid() 不在 Foreach 循环中生成唯一值 - PHP

如何解决uniqid() 不在 Foreach 循环中生成唯一值 - PHP

我有一个处理图像上传的 foreach 循环。当我添加多个图像时,它们会被赋予一个文件名,该文件名由一个唯一的 ID 和一个使用 $filebase = uniqid() . '_' . time();

的时间戳组成

处理图像时,它们具有相同的图像名称,我不明白为什么 foreach 循环没有给出唯一的文件名?

我将 $temp 变量分配给了 foreach 循环的索引,代码如下:$temp = $_FILES['standard-upload-files']['tmp_name'][$index]; 所以我不明白为什么它不增加新值?

图像已正确移动到目标文件夹(尽管名称相同),所以我知道这不是我的 HTML 表单或初始 foreach 循环的问题。

if(isset($_POST['submit-images'])) {

    foreach($_FILES['standard-upload-files']['name'] as $index => $filename ) {

        if($_FILES['standard-upload-files']['error'][$index] === 0 ) {

            $temp = $_FILES['standard-upload-files']['tmp_name'][$index];

            $filebase = uniqid() . '_' . time();

            move_uploaded_file($temp,"images-download/{$filebase}");

        }

    } // main foreach

} // isset($_POST)

解决方法

我明白了,我的第一个猜测是使用 uniqidUniqid 是根据以微秒为单位的当前时间生成的,这可能会产生相同的值。正如文档中提到的,此函数不保证返回值的唯一性

由于大多数系统通过 NTP 等方式调整系统时钟,因此系统时间是不断变化的。因此,此函数可能不会返回进程/线程的唯一 ID。使用 more_entropy 增加唯一性的可能性。

[不太可靠] 的解决方案是将 more_entropy 设置为 true:

uniqid('',true)

但再次提醒,这种方法并不可靠。

因此,请使用另一种方法来生成您的唯一 ID(例如 UUID,如注释 here 中所述。)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。