我将上传的图片存储在一个文件夹中,而将路径和文件名存储在数据库中。请如何最好地生成唯一的文件名,以避免文件夹中的名称冲突?由于
你已经用PHP和MySQL标记了你的问题。
- 你可以使用PHP的uniid函数生成一个唯一的字符串
- 您可以使用MySQL表来存储有关图像的信息,并在该表中使用AUTO_INCREMENT键来为您提供一个唯一的整数,您可以使用该整数作为文件名
最接近的唯一值可能是数据库文件ID。但是,如果您将文件保存在不同的表中,这将不再是这种情况(例如:ArticleFiles和NewsFiles表)。在这种情况下,您可以为单独的表使用单独的目录,或者为文件添加前缀。
您可能还需要从不同的主机名上传文件到相同的服务器位置。在这种情况下,您可以在文件名前面加上用于上传的主机名。
人们倾向于使用time()函数,但这主要是提供信息,因为它不能防止并发上传。通过排序,它确实可以帮助您更容易地找到磁盘上的文件。出于同样的原因,您可以在文件名中包含原始扩展名。
最后,使用最短且信息量最大的唯一值或组合值,如
$file = "{$HOST}.{$TYPE}.{$TIMESTAMP}.{$DATAID}.{$EXT}.uploaded";
但是,要非常小心对上传文件夹的访问权限,因为这是一个严重的安全风险。不允许执行权限,尝试将其放在文档根目录之外,检查上传的文件是否存在危险等
可以使用
$image_name=('Your folder path/'. time () .'.'$extension);
获取任意图像扩展名
$extension = getExtension($filename);
function getExtension($str) {
$i = strrpos($str,".");
if (!$i) { return ""; }
$l = strlen($str) - $i;
$ext = substr($str,$i+1,$l);
return $ext;
}
有点复杂,但它使你的工作变得容易,你可以使用这个扩展名来验证你的文件类型像
if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif"))
{
echo '<h1>Unknown extension!</h1>';
$errors=1;
}else
//your code to save image in folder.
您是否考虑过将数据存储在数据库中?
如果你能;您将摆脱使用唯一文件名的需要,以及与文件&数据库不同步