2013-10-20 42 views
0

我有一个形象uploding到服务器的PHP函数,

但我很困惑,我想给当前上传文件的唯一MD5名称。这里是我的代码:

if ((getimagesize($_FILES['user_image']['tmp_name']) >0) && $_FILES['user_image']['size'] > 0 && ($_FILES['user_image']['size'] < 1048576)){ 

     $uploaddir = DIR.'/images/'; 
     $uploadfile = $uploaddir . basename($_FILES['user_image']['name']); 
     move_uploaded_file($_FILES['user_image']['tmp_name'], $uploadfile); 

     // check if user have already uploaded an image, then delete 
     //it before uploading new one 

     $old_file = db_user_image($user, 'image'); 
     if (strlen($old_file)){ 
      $delete = $uploaddir.$old_file; 
      if (file_exists($delete)) 
       unlink ($delete); 
     } 

     db_save_user_image($user, 'image', $_FILES['user_image']['name']) ; 

} 

请告诉我如何给这个文件独特的md5名称。

+1

...和?你对什么感到困惑?你卡在哪里? –

+0

如何为此文件提供唯一的md5名称? – user007

+0

这对我来说没有任何意义。 md5总和并不比原始文件名更独特,换句话说,具有相同名称的两个文件将导致相同的md5散列。 – hek2mgl

回答

2
的名字组件,如下

更改$uploadfile声明:

$ext = pathinfo($_FILES['user_image']['name'], PATHINFO_EXTENSION); 
$uploadfile = $uploaddir . md5(basename($_FILES['user_image']['name'])).$ext; 
+1

嗨。阿迈勒。那个md5/uniqid不会破坏扩展吗? –

+0

@ShankarDamodaran:看到更新后的答案:) –

+0

很酷!+1) –

1

如果你想要的是给MD5名称的文件,您需要更改线路

$uploadfile = $uploaddir . basename($_FILES['user_image']['name']); 

$uploadfile = $uploaddir . md5(basename($_FILES['user_image']['name'])); 

而且

db_save_user_image($user, 'image', $_FILES['user_image']['name']) ; 

db_save_user_image($user, 'image', md5(basename($_FILES['user_image']['name']))); 
+1

和唯一的名字?所以它不会覆盖任何文件 – user007

+1

md5是非常独特的,你必须生成许多MD5哈希来获得名称冲突。 –

+0

好的,谢谢澄清 – user007

1

只需在md5上替换basename即可。

basename回报尾随路径

0

我已经加入时间戳和使用md5()加密它。它应该为文件生成一个唯一的名称。

$targetFile = md5(time()).$_FILES['user_image']['name']; 

和到位的$_FILES['user_image']['name']在脚本中使用$targetFile

//Code 
if ((getimagesize($_FILES['user_image']['tmp_name']) >0) && $_FILES['user_image']['size'] > 0 && ($_FILES['user_image']['size'] < 1048576)){ 

    $uploaddir = DIR.'/images/'; 
    $targetFile = md5(time()).$_FILES['user_image']['name']; 
    $uploadfile = $uploaddir.$targetFile; 
    move_uploaded_file($_FILES['user_image']['tmp_name'], $uploadfile); 

    // check if user have already uploaded an image, then delete 
    //it before uploading new one 

    $old_file = db_user_image($user, 'image'); 
    if (strlen($old_file)){ 
     $delete = $uploaddir.$old_file; 
     if (file_exists($delete)) 
      unlink ($delete); 
    } 

    db_save_user_image($user, 'image', $targetFile) ; 

}

+0

md5是一个散列函数,你不用“加密”任何东西。 – 1615903