php 上传文件重命名

$filename=@$_FILES[u_file][name];怎么重命名文件名称?是先重命名还是先上传上去在对文件重命名?我这是个多文件上传又应该?if(@$_POS... $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>";} 展开
 我来答
shenmdyw
推荐于2016-03-13 · TA获得超过670个赞
知道小有建树答主
回答量:897
采纳率:100%
帮助的人:247万
展开全部

上传文件或图片进行重命名是我们在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";
}
?>

 大家可以参考一下

sanwkj
推荐于2018-03-04 · TA获得超过126个赞
知道小有建树答主
回答量:154
采纳率:0%
帮助的人:118万
展开全部
一般处理这个问题,有三种方法
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中方法保存文件。到生成好的目录。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友85409ee
2012-02-16 · TA获得超过131个赞
知道答主
回答量:78
采纳率:0%
帮助的人:41.5万
展开全部
move_uploaded_file就可以重命名了。重命名后保存到数据库中也要用新名称

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

你的程序@B处使用是的原来的名称,是可以改名称的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式