我查看了在唯一文件命名的上下文中提到tempnam()
的其他几个问题。
我有点不清楚文件名是否真的独一无二。
假设我们有一个文件上传脚本,可以将文件移动并重命名为永久目录。
我想问的是:文件名是否始终是唯一的,如下所示:
$tmp_name = tempnam($dir, '');
unlink($tmp_name);
copy($uploaded_file, "$tmp_name.$ext");
答案 0 :(得分:1)
正如cantsay建议的那样,我制作了一个php脚本来查找相同的值。
function tempnam_tst() {
for ($i=0; $i < 250000 ; $i++) {
$tmp_name = tempnam('/tmp/', '');
unlink($tmp_name);
$arr[$i] = $tmp_name;
}
return array_intersect($arr, array_unique(array_diff_key($arr, array_unique($arr))));
}
$arr = array();
do {
$arr = tempnam_tst();
} while ( empty($arr) );
echo 'Matching items (case-sensitive):<br>';
echo '<pre>';
print_r($arr);
echo '</pre>';
结果:
Matching items (case-sensitive): Array ( [59996] => /tmp/8wB6RI [92722] => /tmp/KnFtJa [130990] => /tmp/KnFtJa [173696] => /tmp/8wB6RI )
从我看到的情况来看, tempnam()
并不总能生成唯一名称。
答案 1 :(得分:0)
试试这个 - &gt;
$uploadPath = "/upload/";
$fileName = time().$_FILES['file_name']['name'];
$tempName = $_FILES['file_name']['tmp_name'];
move_uploaded_file($tempName,$uploadPath.$fileName);
这将在上传文件夹中上传唯一文件。