上传文件分析:上传的文件是以二进制的形式上传,因此在上传<form></form>表单里面需要声明 enctype="multipart/form-data"
上传的文件所有的信息都包含到全局变量$_FILES中
如:
问题: (1):上传中文乱码问题:只需使用函数incov("原来的编码utf-8","转化为的编码gbk/gb2312",文件名);
(2):把文件放到指定目录里:move_uploaded_file(原来的临时路径/$_FILES['file']['tmp_name'],现在的路径);
代码示例:
1:上传表单代码:
1 <form action="10.Pro.php" method="post" enctype="multipart/form-data"> 2 照片:<input type="file" name="file"/><br> 3 <input type="submit" value="提交"> 4 </form>
2:php处理代码:
1 <?php 2 3 header("Content-Type:text/html;charset=utf-8"); 4 5 //为上传的文件创建目录 6 function mk_dir(){ 7 $filename=iconv("utf-8", "gbk", "./".date("Y年m月d日H时i分",time())); 8 if (!is_dir($filename)){ 9 mkdir($filename); 10 } 11 return $filename; 12 } 13 14 //产生随机文件名 15 function new_file(){ 16 $str="abcdefghigklmnopqrstuvwxyz0123456789ABCDEFGHIGKLMNOPQRSTUVWXYZ"; 17 $str=str_shuffle($str); 18 return $filename=substr($str, 0,8); 19 } 20 21 //判断文件是否上传成功 22 if($_FILES['file']['error']!=0){ 23 die("上传文件失败"); 24 } 25 26 //获取上传文件后缀 27 function getzhui(){ 28 29 $name=explode(".", $_FILES['file']['name']); 30 return $type=end($name); 31 } 32 33 //最后生成的文件名机后缀 34 $filename=mk_dir()."/".new_file().".".getzhui(); 35 36 //把文件转移到特定目录 37 $res=move_uploaded_file($_FILES['file']['tmp_name'],$filename); 38 39 if($res){ 40 echo "上传成功"; 41 }else{ 42 echo "上传失败"; 43 }
3:多文件上传:如果同时上传多个文件,可以先print_r($_FILES)看下,其结果是一个二维数组,每个子数组存放着一个文件的信息,所以可以通过foreach循环遍历来处理上传的文件
print_r($_FILES)结果如下:
php处理代码:
1 //获取上传文件后缀 2 function getzhui($v){ 3 $name=explode(".",$v['name']); 4 return $type=end($name); 5 } 6 foreach ($_FILES as $k=>$v){ 7 8 //最后生成的文件名机后缀 9 $filename=mk_dir()."/".new_file().".".getzhui($v); 10 11 //把文件转移到特定目录 12 $res=move_uploaded_file($v['tmp_name'],$filename); 13 14 if($res){ 15 echo $v['name']."上传成功<br/>"; 16 }else{ 17 echo $v['name']."上传失败<br/>"; 18 } 19 }
提示:如果上传时name属性是同一个数组则代码为:其print_r()结果为一个三维数组
1 //获取上传文件后缀 2 function getzhui($v){ 3 $name=explode(".",$v); 4 return $type=end($name); 5 } 6 foreach ($_FILES as $k=>$v){ 7 8 for ($i=0;$i<count($v['name']);$i++){ 9 //最后生成的文件名机后缀 10 $filename=mk_dir()."/".new_file().".".getzhui($v['name'][$i]); 11 //把文件转移到特定目录 12 $res=move_uploaded_file($v['tmp_name'][$i],$filename); 13 14 if($res){ 15 echo $v['name'][$i]."上传成功<br/>"; 16 }else{ 17 echo $v['name'][$i]."上传失败<br/>"; 18 } 19 } 20 }