php 上传文件重命名

$filename = @$_FILES[u_file][name];怎么重命名文件名称?是先重命名还是先上传上去在对文件重命名?我这是个多文件上传又应该?if (@$_POST[action] == "m_upload"){$file_path = "uploads/";$filename = @$_FILES[u_file][name];for($i = 0; $i < count($filename); $i++){ $url = $filename[$i];$a = explode("/",$url);$c = explode("?",$a[count($a)-1]);$b = explode(".",$c[0]);if($b[1]=="jpg" or $b[1]=="jpeg" or $b[1]=="gif" or $b[1]=="BMP"){$tmpname = @$_FILES[u_file][tmp_name];for ($i = 0; $i < count($filename); $i++){move_uploaded_file($tmpname[$i],$file_path.$i.$filename[$i]);}for($i = 0; $i < count($filename); $i++){ $sql = mysql_query("insert into tj_products_imgex (imgex_name) values ('$filename[$i]')");if($sql){echo "<script>alert('发布成功');this.location.href='products.listener.php?action=list'; </script>";}else{echo "<script>alert('提交失败');history.back();</script>";}}}else{echo "<script>alert('请上传图片,格式JPG/GIF/BMP');history.back();</script>";}

上传文件或图片进行重命名是我们在php上传中会碰到的一个问题了,在重命名无非就是对你上传的文件生成一个随机的字符串了,包括有Md5,随机,或按时间日期来重命名了,下面我来给大家介绍。




如我们在上传文件页面中如下操作:

$name=$_FILES['userfile']['name'];   //将所上传的文件名称赋予name

然后我们要对它进行重命名

//文件名的自动生成
list($usec, $new_name) = explode(" ", microtime());
if(@$extension_name){//限制文件类型为jpg、gif、png、bmp
move_uploaded_file($tmp_name,$new_dir.'/'.$new_name.'.'.$extension_name);//移动到目标文件夹
echo '上传成功';

这样我们就把文件名以时间日期生成了一个新的文件名了,例:

<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" /> 
<br />
<input type="submit" name="submit" value="Submit" />
</form>

以下是我添加的将文件名重命名为系统时间的代码:

<?php$date = date(ymdhis);
//echo($date);
if ((($_FILES["uppic"]["type"] == "image/gif")
|| ($_FILES["uppic"]["type"] == "image/jpeg")
|| ($_FILES["uppic"]["type"] == "image/pjpeg"))
&& ($_FILES["uppic"]["size"] < 2000000))
{
if ($_FILES["uppic"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["uppic"]["error"] . "<br />";
    }
else
    {
    //echo "Upload: " . $_FILES["uppic"]["name"] . "<br />";
    //echo "Type: " . $_FILES["uppic"]["type"] . "<br />";
    //echo "Size: " . ($_FILES["uppic"]["size"] / 1024) . " Kb<br />";
    //echo "Temp file: " . $_FILES["uppic"]["tmp_name"] . "<br />";
   $uptype = explode(".", $_FILES["uppic"]["name"]);
   $newname = $date.".".$uptype[1];
   //echo($newname);
   $_FILES["uppic"]["name"] = $newname;
    if (file_exists("pics/" . $_FILES["uppic"]["name"]))
      {
      echo $_FILES["uppic"]["name"] . " already exists. ";
      }
    else
      {
      $_FILES["uppic"]["name"] = 
      move_uploaded_file($_FILES["uppic"]["tmp_name"],
      "pics/" . $_FILES["uppic"]["name"]);
      echo "<script>alert('上传成功!')</script>";
      echo "<script>window.location.href='

      }
    }
}
else
{
echo "Invalid file";
}
?>

 大家可以参考一下

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-03-04
一般处理这个问题,有三种方法
1.产生随机文件名,实现: $filename=md5(uniqid()).'.'.$ext;
2.生成随机目录:$filename=md5(uniqid())."/".$origen_filename;
3.用文件的md5值做新的文件名,$filename=md5_file($_FILE['u_file']['tmp_name'][$i]).$ext;这个办法的好处是,同一个文件,就算改名字后上传,传到服务器,还是同一个文件名,不会出现重复文件,不同文件,就算是同一个名字,上传后,也不会彼此覆盖。

如果文件很多比如论坛,图片社交网站,网站运行长时间后,同一个目录下,会有很多的文件,这时候,文件检索起来会很慢,会影响到文件的下载,图片的加载速度,这时候就需要对文件进行分文件夹存放。
综上所诉,我觉得最合适的方法是:
首先计算出md5_file()的值,假设结果是 2af54305f183778d87de0c70c591fae4 ,
再创建文件夹2a/f5,也可以是2/a,一个字母分的话,每个目录下面会有16个文件夹,2个字母就是16*16,可以多分几级,然后用第3中方法保存文件。到生成好的目录。本回答被网友采纳
第2个回答  2012-02-16
move_uploaded_file就可以重命名了。重命名后保存到数据库中也要用新名称

move_uploaded_file(“@A:临时文件名”,"@B:保存的文件路径和文件名");

你的程序@B处使用是的原来的名称,是可以改名称的