我将上传的图片存储在一个文件夹中,同时将路径和文件名存储在数据库中。请如何最好地生成唯一的文件名以避免文件夹中的名称冲突?谢谢如何为上传的图片生成唯一的文件名
1
A
回答
3
可能最接近的唯一值是数据库文件ID。但是,如果将文件保存在不同的表中,则不再是这种情况(例如:ArticleFiles和NewsFiles表)。在这种情况下,您可以为单独的表使用单独的目录,或者为文件添加前缀。
您可能还需要将文件从不同的主机名上传到同一个服务器位置。在这种情况下,您可以在文件名前加上用于上传的主机名。
人们倾向于使用time()函数,但这大多是提供信息的,因为它不能保护您免受并发上传。通过订购,它可以帮助您更轻松地找到磁盘上的文件。出于同样的原因,您可以在文件名中包含原始扩展名。
最后,用最短和最翔实的独特价值或构成价值,你可以得到,像
$file = "{$HOST}.{$TYPE}.{$TIMESTAMP}.{$DATAID}.{$EXT}.uploaded";
然而,非常小心的跟在你上传文件夹的访问权限,因为它是一个严重的安全风险。不要让执行权,尝试将其置于文档根目录之外,查看上传的可能危险的文件等
7
你已经用PHP和MySQL标记了你的问题。
- 你可以使用PHP的uniqid函数生成一个唯一的字符串
- 你可以使用MySQL表来存储有关的图像信息,并使用AUTO_INCREMENT键在该表中,给你一个独特的整数,你可以用作文件名
您有任何更具体的要求/目标吗?如果没有,我想这些解决方案中的任何一个都适合你。
0
您可以使用
$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.
0
您是否考虑过将数据存储在数据库中?
如果您能够;您将摆脱具有唯一文件名的需要,以及与数据库不同步的文件&相关的问题。
相关问题
- 1. 如何为上传的照片生成短文件名?
- 2. 如何为django模型生成唯一的文件名.FileField
- 3. MPMediaItem生成唯一的文件名
- 4. 生成唯一的文件名
- 5. 如何使用blueimp文件上传生成的图片预览?
- 6. 图片的唯一短文件名
- 7. 我们如何为Box上传的图片生成缩略图?
- 8. MarkLogic:如何生成唯一的文档/ xml文件名
- 9. 文件名图片上传
- 10. 上传后唯一的文件名
- 11. 获取多次上传的文件的Django生成的唯一名称
- 12. 从文件名生成唯一散列
- 13. 如何使用jfilechooser生成唯一的文件名?
- 14. 如何生成唯一的文件名或路径?
- 15. 取文件的名称/图片上传
- 16. 更改上传图片的文件名?
- 17. 为S3生成唯一的密钥(文件名)
- 18. 生成的图片文件上传用于RSS
- 19. 上传文件时为文件提供唯一名称
- 20. 多个图片上传后的唯一名称
- 21. 为上传的图片创建唯一的ID
- 22. WordPress - 如何通过文件名获取上传的图片?
- 23. 图片上传+缩略图生成器
- 24. path.getrandomfilename是否会每次生成一个唯一的文件名?
- 25. Python工具生成一个唯一的临时文件名
- 26. Retrofit 2图片上传成功,但图片上传损坏的文件
- 27. 保存带有唯一名称的生成的Word文件(mailmerge)
- 28. 上传图片的文件名不能为空
- 29. 生成唯一名称?
- 30. R.java文件如何为资源生成唯一标识
-1:time()函数不会保护您免受并发上传。 – George
这里我们可以使用time()或rand()作为唯一文件名.... – omnath