在php mysql中上传时重命名文件

时间:2014-11-23 07:20:11

标签: php mysql

我有一段简单的代码用于上传php / mysql中的文件,效果很好。

$target = "uploads/clients/";
  $target = $target . basename( $_FILES['photo']['name']);

  $pic=($_FILES['photo']['name']);

  //Writes the photo to the server
  if(move_uploaded_file($_FILES['photo']['tmp_name'], $target))
  {
  $insertSQL = sprintf("INSERT INTO clients (img, `cname`) VALUES (%s, %s)",
                       GetSQLValueString($pic, "text"),
                       GetSQLValueString($_POST['cname'], "text"));

  mysql_select_db($database_thebest, $thebest);
  $Result1 = mysql_query($insertSQL, $thebest) or die(mysql_error());

现在我想要的是重命名文件名,如果该文件名已经存在,然后将重命名的文件名插入数据库

感谢您的回复

4 个答案:

答案 0 :(得分:1)

试试这个......

$upload_dir = "uploads/clients/";
$target = $upload_dir . basename( $_FILES['photo']['name']);
while(file_exists($target)){
    $new = time().rand();
    $target = $upload_dir . '_' . $new . '_' . basename( $_FILES['photo']['name']);
}

// rest of the code now...
$pic= $new . ($_FILES['photo']['name']);

答案 1 :(得分:1)

你可以通过多种方式实现。

方法1

在保存到服务器之前检查file_exists()

if (file_exists("../img/imageDirectory/" . $_FILES["file"]["name"]))
{
   echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
   move_uploaded_file($_FILES["file"]["tmp_name"], "../img/imageDirectory/" . $_FILES["file"]["name"]);
  // Others insert statements here...
}

方法2

使用microtime()为每个文件生成唯一名称:

$temp = explode(".",$_FILES["file"]["name"]);
$newfilename = substr(microtime(), 2, 7) . '.' .end($temp);
move_uploaded_file($_FILES["file"]["tmp_name"], "../img/imageDirectory/" . $newfilename;

不推荐使用

mysql_*个函数。不要再使用它们了。

尝试使用PDOmysqli

答案 2 :(得分:0)

运行SELECT查询以检查名称是否存在。如果没有,请插入它。因此,从您的表中选择名称=您的文件名的所有内容。如果是numrows> 0你改了名字。

实际上,为什么不使用自动增量值作为名称,并在单独的列中存储您想要调用它的任何内容。然后你会知道每个名字都会有所不同,你也不会有疯狂的长网址或文件名。

答案 3 :(得分:0)

首先,你必须检查表,该文件名已经存在或不存在。

select * from client where cname="filename";

如果存在filename,则必须更改文件名。