首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何为上传的图片生成唯一的文件名

如何为上传的图片生成唯一的文件名
EN

Stack Overflow用户
提问于 2011-11-09 17:01:56
回答 4查看 1.8K关注 0票数 1

我将上传的图片存储在文件夹中,同时将路径和文件名存储在数据库中。请告诉我怎样才能最好地生成唯一的文件名,以避免文件夹中的名称冲突?谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-11-09 17:17:39

可能您拥有的最接近的唯一值是数据库文件ID,但是如果您将文件保存在不同的表中,情况将不再是这样(例如: ArticleFiles和NewsFiles表)。在这种情况下,您可以对不同的表使用不同的目录,或者为您的文件添加前缀。

您可能还需要从不同的主机名将文件上载到相同的服务器位置。在这种情况下,您可以在文件名前加上用于上载的主机名。

人们倾向于使用time()函数,但这主要是为了提供信息,因为它不能防止并发上传。通过排序,它确实可以帮助您更容易地在磁盘上查找文件。出于同样的原因,您可以在文件名中包含原始扩展名。

最后,使用您可以获得的最短且信息最丰富的唯一值或组合值,例如

代码语言:javascript
运行
复制
$file = "{$HOST}.{$TYPE}.{$TIMESTAMP}.{$DATAID}.{$EXT}.uploaded";

但是,要非常小心您的上传文件夹的访问权限,因为它是一个严重的安全风险。不允许执行权限,尝试将其放在文档根目录之外,检查上载是否存在可能的危险文件,等等。

票数 3
EN

Stack Overflow用户

发布于 2011-11-09 17:07:45

你已经用PHP和MySQL标记了你的问题。

  • 您可以使用PHP的uniqid函数来生成一个惟一的字符串
  • 您可以使用一个MySQL表来存储有关图像的信息,并在该表中使用一个AUTO_INCREMENT键来为您提供一个唯一的整数,您可以将其用作文件名

您是否有更具体的要求/目标?如果没有,我想这两种解决方案中的任何一种都应该对您有效。

票数 7
EN

Stack Overflow用户

发布于 2011-11-09 17:29:08

您可以使用

代码语言:javascript
运行
复制
$image_name=('Your folder path/'. time () .'.'$extension);

对于获取任何图像扩展名

代码语言:javascript
运行
复制
 $extension = getExtension($filename);

    function getExtension($str) {
     $i = strrpos($str,".");
     if (!$i) { return ""; }
     $l = strlen($str) - $i;
     $ext = substr($str,$i+1,$l);
     return $ext;

}

有点复杂,但它让你的工作变得简单,你可以使用这个扩展来验证你的文件类型,比如

代码语言:javascript
运行
复制
   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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8062497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档