uniqid() 不在 Foreach 循环中生成唯一值 - PHP
uniqid() not generating unique values within a Foreach loop - 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)
我明白了,我的第一个猜测是使用 uniqid。 Uniqid
是根据当前时间(以微秒为单位)生成的,这可能会产生相同的值。如文档所述,此函数不保证 return 值的 唯一性 。
由于大多数系统都是通过NTP之类的方式调整系统时钟,所以系统时间是不断变化的。因此,此函数可能没有 return process/thread 的唯一 ID。使用 more_entropy
增加唯一性的可能性。
一个[不太可靠]的解决方案是将more_entropy
设置为真:
uniqid('', true)
但再次提醒,这种方法并不可靠。
因此请使用另一种方法来生成您的唯一 ID(UUID
例如,如评论 here 中所述)
我有一个正在处理图像上传的 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)
我明白了,我的第一个猜测是使用 uniqid。 Uniqid
是根据当前时间(以微秒为单位)生成的,这可能会产生相同的值。如文档所述,此函数不保证 return 值的 唯一性 。
由于大多数系统都是通过NTP之类的方式调整系统时钟,所以系统时间是不断变化的。因此,此函数可能没有 return process/thread 的唯一 ID。使用 more_entropy
增加唯一性的可能性。
一个[不太可靠]的解决方案是将more_entropy
设置为真:
uniqid('', true)
但再次提醒,这种方法并不可靠。
因此请使用另一种方法来生成您的唯一 ID(UUID
例如,如评论 here 中所述)