如何为唯一文件名创建函数

时间:2014-05-09 06:09:23

标签: php mysql function file-upload

我想创建一个函数,它会重命名文件,并从其名称和用户ID生成唯一的名称。下面的功能正常,但我不满意,请给我类似的功能。

if(is_array($file) and $file['name'] != '')
        {
            // getting unique file name
            $file['name'] = getUniqueFilename($file);

            $file_path = $file_root_path.$file['name'];
            if(move_uploaded_file($file['tmp_name'], $file_path)){$filename = $file['name'];}
            //
            if($oldfile != ''){delete_file($file_root_path.$oldfile);}
            return $filename;
        } // if ends
        else
        {
            return $oldfile;
        } // else ends

function getUniqueFilename($file)
    {
        if(is_array($file) and $file['name'] != '')
        {
            // getting file extension
            $fnarr          = explode(".", $file['name']);
            $file_extension = strtolower($fnarr[count($fnarr)-1]);

            // getting unique file name
            $file_name = substr(md5($file['name'].time()), 5, 15).".".$file_extension;
            return $file_name;
        } // ends for is_array check
        else
        {
            return '';
        } // else ends
    } // ends

4 个答案:

答案 0 :(得分:1)

使用php uniqid()生成唯一的ID http://php.net/manual/en/function.uniqid.php

function getUniqueFilename($file)
{
    if(is_array($file) and $file['name'] != '')
    {
        // getting file extension
        $file_extension = pathinfo($file['name'], PATHINFO_EXTENSION);

        // getting unique file name
        $file_name = uniqid().".".$file_extension;

        while(file_exists('PATH_TO_WHERE_YOU_SAVE_FILE/'.$file_name)) {
            $file_name = uniqid().".".$file_extension;
        }

        return $file_name;
    } // ends for is_array check
    else
    {
        return '';
    } // else ends
} // ends

答案 1 :(得分:0)

请使用此代码,这可能对您有所帮助

<?php
  function tempdir($dir, $prefix='', $mode=0700)
  {
    if (substr($dir, -1) != '/') $dir .= '/';

    do
    {
      $path = $dir.$prefix.mt_rand(0, 9999999);
    } while (!mkdir($path, $mode));

    return $path;
  }
?>

参考链接:http://www.php.net/manual/en/function.tempnam.php

答案 2 :(得分:0)

您可以使用当前[md5][1]和随机数加密[timestamp][2]哈希值创建文件名。

类似的东西:

 function getUniqueFilename($file)
 {
   do {
     $name = md5(time().rand().$file['name']);
   } while (file_exists($path.$name);
   return $name;
 }

path设置为您希望创建文件的文件夹

答案 3 :(得分:0)

获取文件内容的哈希值,例如与sha1_file。这保证了每个唯一文件的唯一名称。如果第二次上传同一个文件,它将生成相同的哈希值,因此您甚至不会存储相同文件的副本。