文件上传和多文件上传

上传文件分析:上传的文件是以二进制的形式上传,因此在上传<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 }

 

posted @ 2017-06-02 16:58  雨后桥前  阅读(236)  评论(0编辑  收藏  举报