2011-11-09 39 views

回答

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:time()函数不会保护您免受并发上传。 – George

+0

这里我们可以使用time()或rand()作为唯一文件名.... – omnath

0

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

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