将随机名称附加到文件上载

时间:2014-07-15 06:05:52

标签: php mysql file upload

我将文件和用户数据一起保存到数据库中的表中。现在,一切都运行得很好,除了我找不到一个有效的方法将随机名称附加到上传的文件名称。其中重命名文件以供查看和在数据库中。这就是我现在所做的工作。

<?php 

 $target = "files/"; 
 $target = $target . basename( $_FILES['file']['name']); 

 $title=$_POST['title'];
 $description=$_POST['description'];
 $username=$_POST['username'];
 $image=$_POST['image'];
 $timestamp=$_POST['timestamp'];
 $file=($_FILES['file']['name']);
 $from=$_POST['from'];
 $button_id=$_POST['button_id'];

 mysql_connect("", "", "") or die(mysql_error()) ; 
 mysql_select_db("") or die(mysql_error()) ; 

  mysql_query("INSERT INTO `client_files` VALUES ('$title', '$description','$username', '$image', '$timestamp', '$file', '$from', '$button_id')") ;

 if(move_uploaded_file($_FILES['file']['tmp_name'], $target)) 
 { 

echo "The file ". basename( $_FILES['uploadedfile']['name']). " has been uploaded, and your information has been added to the directory"; 
 } 
 else { 
  echo "Sorry, there was a problem uploading your file."; 
 } 
 ?> 

将随机名称附加到上传文件的最佳方法是什么?

更新

我尝试了以下内容,我认为这将是解决方案......

 $file = md5(uniqid(rand(), true)) . '.' . substr(strrchr(($_FILES['file']['name']), '.'), 1);

我可以将文件名重命名为DB上的随机字符串,但一旦传递到该文件夹​​就无法更新。我想也许,如果我首先通过目标,它将改变服务器上的数据库和文件。虽然我尝试了以下内容,

$target = "files/"; $target = tempnam($target, "");

但文件破损且无法读取..

2 个答案:

答案 0 :(得分:0)

您可以在现有名称后附加一个唯一的随机数。 请尝试下面的代码

$target = "files/"; 
$random = rand(0,9999);
$filename = basename( $_FILES['file']['name']);

$target = $target.$random.$filename ; 

答案 1 :(得分:0)

将$ file变量设置为您想要的随机名称,您也可以保留文件扩展名。我使用以下代码

$file = md5(uniqid(rand(), true)) . '.' . substr(strrchr(($_FILES['file']['name']), '.'), 1);

移动并保存文件。

$target = $target . $file; 
move_uploaded_file($_FILES['file']['tmp_name'], $target);

您可以在上传时重命名该文件。