如何用PHP给上传的文件改名?
各位高手,我要给我上传某个路径下的BMP或GIF,JPG改名,用PHP该怎么做?上传图片或文件时自动改名为当前的日期.因为本人刚接触PHP才十多天,这个对本人而言,难度极...
各位高手,
我要给我上传某个路径下的BMP或GIF,JPG改名, 用PHP该怎么做?
上传图片或文件时自动改名为当前的日期.
因为本人刚接触PHP才十多天,这个对本人而言,难度极高,希望各位高手赐教,最好有源代码。 展开
我要给我上传某个路径下的BMP或GIF,JPG改名, 用PHP该怎么做?
上传图片或文件时自动改名为当前的日期.
因为本人刚接触PHP才十多天,这个对本人而言,难度极高,希望各位高手赐教,最好有源代码。 展开
4个回答
展开全部
上传文件,PHP是在你的服务器上建立临时文件,日期肯定是当时的,名字是随机名字,你应该把这个文件COPY到你自己的文件夹下(应该专门用一个文件夹来存放大家上传的文件)。下面是我上传文件的例子(部分代码):
保存部分PHP代码:
for ($i=1; $i<=$filecnt; $i++){
$f_image="file".$i;
$tmp_name=$HTTP_POST_FILES["$f_image"][tmp_name];
$src_name=$HTTP_POST_FILES["$f_image"][name];
$src_size=$HTTP_POST_FILES["$f_image"][size];
$note_str=$_REQUEST["note$i"];
if (!$tmp_name || !$src_name || $tmp_name=='nono') continue;
$ext=substr(strrchr($src_name,'.'),1);
$ext=strtolower($ext);
if (substr($ext,0,3)=='php' || $ext=='pl' || $ext=='cgi'){
echo "$src_name 没有保存,因为你传的是脚本文件,如果你不想在主机上搞破坏,请你压缩后上传。<br>";
continue;
}
//处理图片文件
$imginfo=getimagesize($tmp_name);
if ($imginfo && $imginfo[0]>0){
//压缩宽度超过800的图片为800,10K以上的JPG图片用30%进行压缩
if ($imginfo[0]>800){
echo "你上传的图片幅面为 $imginfo[0] x $imginfo[1] ,将被压缩到800个象素宽。<br>";
system('"C:\Program Files\ImageMagick-6.0.7-Q16\convert.exe"'." -sample 800 -quality 80 $tmp_name $tmp_name");
} elseif($imginfo[2]==2 && $src_size>10240) system("/usr/local/bin/convert -quality 30 $tmp_name $tmp_name");
//规范化图片文件扩展名
if ($imginfo[2]==1) $ext='gif';
elseif ($imginfo[2]==2) $ext='jpg';
elseif ($imginfo[2]==3) $ext='png';
elseif ($imginfo[2]==4) $ext='swf';
elseif ($imginfo[2]==5) $ext='psd';
elseif ($imginfo[2]==6) $ext='bmp';
elseif ($imginfo[2]==7) $ext='tiff';
elseif ($imginfo[2]==8) $ext='tiff';
//压缩BMP、TIFF文件为JPG格式
if ($imginfo[2]==6 || $imginfo[2]==7 || $imginfo[2]==8){
system('"C:\Program Files\ImageMagick-6.0.7-Q16\convert.exe"'." -quality 80 $tmp_name $tmp_name.jpg");
rename("$tmp_name.jpg",$tmp_name);
$ext='jpg';
}
}
$save_name="$year_week/$save_id-$i";
if ($ext!='') $save_name.='.'.$ext;
$result="文件 $src_name 保存为 $save_name ";
if(copy($tmp_name,$save_name)){
$str="insert into clubfile(user,ext,note,fip,pub,fname,fsize) values('$PHP_AUTH_USER','$ext','$note_str','$ip',$pub,'$save_name',$src_size)";
mysql_query($str);
$result .= '成功。';
}
else{
$result .= '失败!';
}
echo $result.'<br>';
上传页面PHP代码:
echo <<<END
<div class=pagetitle>上传文件</div>
<center>特别说明:上传后<b>先</b>在其它网站链接的文件将被自动删除!</center>
<script language="Javascript">
var filecnt=1;
function addfile()
{
filecnt++;
document.all.item('fileinput').innerHTML = document.all.item('fileinput').innerHTML + "<br>上传文件"+filecnt+": <input type=file name=file"+filecnt+" size=30 onBlur=setNote("+filecnt+")> 说明:<input type=text name=note"+filecnt+" size=32>";
form1.filecnt.value=filecnt;
}
function del_note_path(){
for(i=1;i<=filecnt;i++){
v=eval('document.form1.note'+i);
v.value=v.value.replace(/.*\\\\/,'');
}
}
</script>
<form name=form1 method=post enctype="multipart/form-data" action=$_SERVER[PHP_SELF]>
<input type=hidden name=job value='upload_save'>
<input type=hidden name=filecnt value=1>
<INPUT TYPE=hidden name=MAX_FILE_SIZE value=10240000>
<span id=fileinput>上传文件1: <input type=file name=file1 size=30 onBlur=setNote(1)> 说明:<input type=text name=note1 size=32></span><br>
<input type=button onclick="javascript:addfile();" value='增加上传文件'>(可以一次上传多个文件)
<input type=button onclick='javascript:del_note_path();' value='删除说明中的目录'><br>
公开: <input type=checkbox name=pub> (选中公开以后,别人可以看见你上传的文件) <br>
<input type=submit value="确认文件清单,立即上传">(建议你一定写上详细的文件说明,因为上传后文件将统一命名)
</form>
<a href=$PHP_SELF>返回浏览画面</a>
<script language=javascript>
function setNote(i){
var s='';
eval("s=form1.file"+i+".value");
s=s.toLowerCase();
s=s.substr(s.length-4);
if (s=='.bmp') alert('严禁上传BMP文件:请你用画图打开,另存为JPG格式再上传');
s="if (form1.file"+i+".value!='' && form1.note"+i+".value=='') form1.note"+i+".value=form1.file"+i+".value";
eval(s);
}
</script>
</body>
</html>
END;
保存部分PHP代码:
for ($i=1; $i<=$filecnt; $i++){
$f_image="file".$i;
$tmp_name=$HTTP_POST_FILES["$f_image"][tmp_name];
$src_name=$HTTP_POST_FILES["$f_image"][name];
$src_size=$HTTP_POST_FILES["$f_image"][size];
$note_str=$_REQUEST["note$i"];
if (!$tmp_name || !$src_name || $tmp_name=='nono') continue;
$ext=substr(strrchr($src_name,'.'),1);
$ext=strtolower($ext);
if (substr($ext,0,3)=='php' || $ext=='pl' || $ext=='cgi'){
echo "$src_name 没有保存,因为你传的是脚本文件,如果你不想在主机上搞破坏,请你压缩后上传。<br>";
continue;
}
//处理图片文件
$imginfo=getimagesize($tmp_name);
if ($imginfo && $imginfo[0]>0){
//压缩宽度超过800的图片为800,10K以上的JPG图片用30%进行压缩
if ($imginfo[0]>800){
echo "你上传的图片幅面为 $imginfo[0] x $imginfo[1] ,将被压缩到800个象素宽。<br>";
system('"C:\Program Files\ImageMagick-6.0.7-Q16\convert.exe"'." -sample 800 -quality 80 $tmp_name $tmp_name");
} elseif($imginfo[2]==2 && $src_size>10240) system("/usr/local/bin/convert -quality 30 $tmp_name $tmp_name");
//规范化图片文件扩展名
if ($imginfo[2]==1) $ext='gif';
elseif ($imginfo[2]==2) $ext='jpg';
elseif ($imginfo[2]==3) $ext='png';
elseif ($imginfo[2]==4) $ext='swf';
elseif ($imginfo[2]==5) $ext='psd';
elseif ($imginfo[2]==6) $ext='bmp';
elseif ($imginfo[2]==7) $ext='tiff';
elseif ($imginfo[2]==8) $ext='tiff';
//压缩BMP、TIFF文件为JPG格式
if ($imginfo[2]==6 || $imginfo[2]==7 || $imginfo[2]==8){
system('"C:\Program Files\ImageMagick-6.0.7-Q16\convert.exe"'." -quality 80 $tmp_name $tmp_name.jpg");
rename("$tmp_name.jpg",$tmp_name);
$ext='jpg';
}
}
$save_name="$year_week/$save_id-$i";
if ($ext!='') $save_name.='.'.$ext;
$result="文件 $src_name 保存为 $save_name ";
if(copy($tmp_name,$save_name)){
$str="insert into clubfile(user,ext,note,fip,pub,fname,fsize) values('$PHP_AUTH_USER','$ext','$note_str','$ip',$pub,'$save_name',$src_size)";
mysql_query($str);
$result .= '成功。';
}
else{
$result .= '失败!';
}
echo $result.'<br>';
上传页面PHP代码:
echo <<<END
<div class=pagetitle>上传文件</div>
<center>特别说明:上传后<b>先</b>在其它网站链接的文件将被自动删除!</center>
<script language="Javascript">
var filecnt=1;
function addfile()
{
filecnt++;
document.all.item('fileinput').innerHTML = document.all.item('fileinput').innerHTML + "<br>上传文件"+filecnt+": <input type=file name=file"+filecnt+" size=30 onBlur=setNote("+filecnt+")> 说明:<input type=text name=note"+filecnt+" size=32>";
form1.filecnt.value=filecnt;
}
function del_note_path(){
for(i=1;i<=filecnt;i++){
v=eval('document.form1.note'+i);
v.value=v.value.replace(/.*\\\\/,'');
}
}
</script>
<form name=form1 method=post enctype="multipart/form-data" action=$_SERVER[PHP_SELF]>
<input type=hidden name=job value='upload_save'>
<input type=hidden name=filecnt value=1>
<INPUT TYPE=hidden name=MAX_FILE_SIZE value=10240000>
<span id=fileinput>上传文件1: <input type=file name=file1 size=30 onBlur=setNote(1)> 说明:<input type=text name=note1 size=32></span><br>
<input type=button onclick="javascript:addfile();" value='增加上传文件'>(可以一次上传多个文件)
<input type=button onclick='javascript:del_note_path();' value='删除说明中的目录'><br>
公开: <input type=checkbox name=pub> (选中公开以后,别人可以看见你上传的文件) <br>
<input type=submit value="确认文件清单,立即上传">(建议你一定写上详细的文件说明,因为上传后文件将统一命名)
</form>
<a href=$PHP_SELF>返回浏览画面</a>
<script language=javascript>
function setNote(i){
var s='';
eval("s=form1.file"+i+".value");
s=s.toLowerCase();
s=s.substr(s.length-4);
if (s=='.bmp') alert('严禁上传BMP文件:请你用画图打开,另存为JPG格式再上传');
s="if (form1.file"+i+".value!='' && form1.note"+i+".value=='') form1.note"+i+".value=form1.file"+i+".value";
eval(s);
}
</script>
</body>
</html>
END;
展开全部
楼上那位高手估计在搞php有一定的时间了!应该在php5前
php5现在推荐
$_FILES[]这个超全局变量数组来代添$HTTP_POST_FILES!
你想你说的一定是上传文件重命名吧!
可以使用(个人认为他们都可以重命名的,只是改变了文件名罢了,你想想是不是呢!)
rename();//重命名
copy();//复制
upload_move_file();//移动
date()//得到当前时间,格式自己定!
如; 假设当前上传的文件叫'1.jpg',你的文件域名叫file,上传的文件在根目录下面;
$date=date('Ymdhis');//得到当前时间,如;20070705163148
$fileName=$_FIFLES['file']['name'];//得到上传文件的名字
$name=explode('.',$fileName);//将文件名以'.'分割得到后缀名,得到一个数组
$newPath=$date.'.'.$name[1];//得到一个新的文件为'20070705163148.jpg',即新的路径
$oldPath=$_FILES['file']['tmp_name'];//临时文件夹,即以前的路径
rename($oldPath,$newPath); 就可以重命名了!
相关使用函数:
explode():http://manual.phpv.net/zh/function.explode.php
rename() :http://cn.php.net/manual/zh/function.rename.php
$_FILES[]:这个不要我说了吧..
如果你还没有懂,如果发消息给我!
我个人觉得,代码这东西还是得自己写!
正如:书上有句话说,实践是最好的学习方法!
php5现在推荐
$_FILES[]这个超全局变量数组来代添$HTTP_POST_FILES!
你想你说的一定是上传文件重命名吧!
可以使用(个人认为他们都可以重命名的,只是改变了文件名罢了,你想想是不是呢!)
rename();//重命名
copy();//复制
upload_move_file();//移动
date()//得到当前时间,格式自己定!
如; 假设当前上传的文件叫'1.jpg',你的文件域名叫file,上传的文件在根目录下面;
$date=date('Ymdhis');//得到当前时间,如;20070705163148
$fileName=$_FIFLES['file']['name'];//得到上传文件的名字
$name=explode('.',$fileName);//将文件名以'.'分割得到后缀名,得到一个数组
$newPath=$date.'.'.$name[1];//得到一个新的文件为'20070705163148.jpg',即新的路径
$oldPath=$_FILES['file']['tmp_name'];//临时文件夹,即以前的路径
rename($oldPath,$newPath); 就可以重命名了!
相关使用函数:
explode():http://manual.phpv.net/zh/function.explode.php
rename() :http://cn.php.net/manual/zh/function.rename.php
$_FILES[]:这个不要我说了吧..
如果你还没有懂,如果发消息给我!
我个人觉得,代码这东西还是得自己写!
正如:书上有句话说,实践是最好的学习方法!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
PHP 中的 move_uploaded_file() 函数可以实现,改相应的参数即可
move_uploaded_file(file,newloc)
参数说明
file 必需。规定要移动的文件。
newloc 必需。规定文件的新位置。
注释:本函数仅用于通过 HTTP POST 上传的文件。
注意:如果目标文件已经存在,将会被覆盖。
例如:
<?php
//上传路径
$uploads_dir = '/uploads';
foreach ($_FILES["pictures"]["error"] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
$tmp_name = $_FILES["pictures"]["tmp_name"][$key];
//下面的$name就是上传后的文件名字,可以改变,比如之前文件名字为:1.gif 可以改为 2.gif
$name = $_FILES["pictures"]["name"][$key];
move_uploaded_file($tmp_name, "$uploads_dir/$name");
}
}
?>
move_uploaded_file(file,newloc)
参数说明
file 必需。规定要移动的文件。
newloc 必需。规定文件的新位置。
注释:本函数仅用于通过 HTTP POST 上传的文件。
注意:如果目标文件已经存在,将会被覆盖。
例如:
<?php
//上传路径
$uploads_dir = '/uploads';
foreach ($_FILES["pictures"]["error"] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
$tmp_name = $_FILES["pictures"]["tmp_name"][$key];
//下面的$name就是上传后的文件名字,可以改变,比如之前文件名字为:1.gif 可以改为 2.gif
$name = $_FILES["pictures"]["name"][$key];
move_uploaded_file($tmp_name, "$uploads_dir/$name");
}
}
?>
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
都是高手,
俺们也来学习学习
俺们也来学习学习
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询