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

时间:2011-11-09 09:01:56

标签: php javascript mysql

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

4 个答案:

答案 0 :(得分:7)

您已使用PHP和MySQL标记了您的问题。

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

您有更具体的要求/目标吗?如果没有,我想这些解决方案中的任何一个都适合你。

答案 1 :(得分:3)

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

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

人们倾向于使用time()函数,但这主要是提供信息,因为它不能保护您免受并发上传的影响。它通过订购帮助您更轻松地查找磁盘上的文件。出于同样的原因,您可以在文件名中包含原始扩展名。

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

$file = "{$HOST}.{$TYPE}.{$TIMESTAMP}.{$DATAID}.{$EXT}.uploaded";

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

答案 2 :(得分: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.

答案 3 :(得分:0)

您是否考虑过将数据存储在数据库中?

如果你能够;您将摆脱需要具有唯一文件名,以及与文件和文件相关的问题。数据库不同步。