如果名称已存在,如何重命名文件?

时间:2011-08-11 20:39:18

标签: php file

我使用以下脚本。它基本上检查上传文件的名称是否已经存在,如果是,它应该将其重命名为其他内容并上传。到目前为止,它不起作用。要么重命名所有文件,要么当我尝试通过网页打开文件时,它会显示损坏的文件。

代码:

$sql="SELECT filename FROM doc_u WHERE person_id= '$pid'";  

    $result=mysql_query($sql);

    $query = mysql_query($sql) or die ("Error: ".mysql_error());

 if ($result == "")
 {
 echo "";
  }
   echo "";


    $rows = mysql_num_rows($result);

    if($rows == 0)
    {
   print("");

    }
    elseif($rows > 0)
    {
   while($row = mysql_fetch_array($query))
    {

   $existing = $row['filename'];

   print("");
   }

   }

     if ( $filename === $existing ) {
$filename = $uniqueidgenerator.strrchr($_FILES['filename']['name'], ".");

    } else {
     $filename = $_FILES['filename']['name'];;
    }

//After checking it will move the files

      if(move_uploaded_file($_FILES['filename']['tmp_name'],$upload_path . $filename))
     echo ''; 
  else
     echo ''; 

2 个答案:

答案 0 :(得分:2)

鉴于您已经在使用数据库,请让我尽可能地说明:永远不要使用用户提供的FILENAME。相反,将每个上载的文件存储在其相应的DB记录的主键ID号中(您使用自动递增的整数表示ID,对吧?)。将文件的名称存储在数据库中,现在您可以拥有任意数量的“text.txt”文件,因为每个实际文件都将命名为“1”,“53”和“207”等... < / p>

答案 1 :(得分:1)

这里没有太多代码可供使用。我怀疑$filename未正确初始化。所以在你的if ( $filename === $existing )中真正说if(undefined === undefined)总是如此。

我不明白为什么文件会被破坏。这可能完全是一个不同的问题。

另外,请注意那里的sql语句。这是一个等待发生的SQL注入。如果您使用预准备语句或至少使用mysql_escape_string,那将会好得多。当然,这已被弃用,有利于准备好的陈述。

更好的工作流程是首先使用文件的元数据在数据库中插入一行,然后使用您返回的主键重命名该文件。它保证永远是唯一的。