100)PHP,文件上传总代码整理

首先是我的目录关系:
    

    

 

 

然后我的html表单代码:

      

        

 

 1 <html>
 2 <head>
 3     <title>Form</title>
 4     <meta
 5             http-equiv="Content-Type" content="text/html;charset=UTF-8">
 6 </head>
 7 
 8 <body>
 9 <form action="BBB.php" method="post" name="form1" enctype="multipart/form-data" >
10     <table width="271" border="0" align="center" cellpadding="0" cellspacing="0">
11     <tr>
12         <td width="85">
13             <div align="right">姓名:</div></td>
14         <td width="186">
15             <label>
16                 <input name="username" type="text" id="username">
17             </label>
18         </td>
19 
20     </tr>
21     <tr>
22         <td>
23             <div align
24             ="right">职业:</div></td>
25         <td>
26             <label>
27                 <input name
28                 ="job" type="text" id="job">
29             </label></td>
30     </tr>
31         <tr>
32             <td>
33                 <label>
34                     文件上传:<input type="file" name="picture">
35                 </label>
36             </td>
37         </tr>
38     </table>
39     <p align="center">
40     <input type="submit" value="Submit">
41     </p>
42 </form>
43 </body>
44 </html>

 

 

然后是我的BBB.php代码

              

 1 <?php
 2     /**
 3      * 上传函数
 4      * @param $tmp_file  $_FILES的五个信息,比如upload($_FILES('mingzi')
 5      * $_FILES里面的名字是你的对应的html代码中的上传文件的那个name
 6      * @return bool  失败返回false,成功就是true
 7      */
 8     $tmp_file=$_FILES['picture'];
 9     function upload($tmp_file){
10     
11         /**
12          * 是否存在错误
13          */
14         
15         if($tmp_file['error']!=0){
16             echo '文件上传错误';
17             return false;
18         }
19         /**
20          * 尺寸,
21          * 这个函数自己定的,但是应该是初始化设定的,就是这个值是变化的,不是一个固定的值。
22          */        
23       
24         $max_size=1024*1024;//自己设定的最大尺寸
25         if($tmp_file['size']>$max_size){
26             echo "文件过大";
27             return false;
28         }
29         /**
30          * 验证后缀名,
31          * 用验证后缀和MIME方法
32          */
33                 //首先是验证后缀名
34         $tmp_file_zhui=strrchr($tmp_file['name'],'.') ;
35                 //strrchr函数是来剪切字符串的最后出现.的包括这个.后面的全部截取
36         //后缀的映射数组,其实就是那个满足条件的后缀表(用关联数组表示)
37         $tmp_file_zhui_list=array(
38             '.png','.gif','.jpeg','.jpg'
39         );
40         if(!in_array($tmp_file_zhui,$tmp_file_zhui_list)){
41             echo "文件格式有问题";
42             return false;
43         }
44                 //就是那个$_FILES['type']有一个格式,下面的是对应那个映射表
45         $tmp_file_zhui_MIMElist=array(
46             '.png'=>array('image/png','image/x-png'),
47             '.jpg'=>array('image/jpeg','image/x-pjpeg'),
48             '.jpeg'=>array('image/jpeg','image/pjpeg'),
49             '.gif'=>array('image/gif'),
50         );
51         $old_list=array();//下面直接用$old_list不行,我觉得这个就是声明,这是自己加的
52         //得出真正的映射表,因为在我的后缀映射表中,可能不是这四个,一旦发生改动,我的下面的映射关系,我还得自己改,所以,我就用一个foreach,上面有什么后缀,我的下面就给他对应上什么$_FILE['type']格式,然后得到我要的MIME映射表
53         foreach ($tmp_file_zhui_list as $value){
54             foreach($tmp_file_zhui_MIMElist[$value] as $key=>$item){
55 //               var_dump($tmp_file_zhui_MIMElist[$value][$key]);
56                 $new_MIME_list=array_merge($old_list,(array)$tmp_file_zhui_MIMElist[$value][$key]);
57                $old_list=$new_MIME_list;
58             }
59             
60         }
61         //去重
62         $new_MIME_list=array_unique($new_MIME_list);
63         
64         //然后用MIME验证
65         $phpfinfo=new finfo(FILEINFO_MIME_TYPE);
66         $f_type=$phpfinfo->file($tmp_file['tmp_name']);
67         echo $f_type;
68         if(!in_array($f_type,$new_MIME_list)){
69             echo "文件格式有误";
70             return false;
71         }
72         //后缀验证完成。
73         //建立一个文件夹,来存我的临时文件
74         if(!is_dir('./wangchao')){
75             mkdir('./wangchao');
76         }
77         
78         $sub_dir_name=date('Y--m-d-H');//截取年月日小时
79         //unipid是产生一个随机名字,可以试验一下  echo uniqid();
80         move_uploaded_file($tmp_file['tmp_name'],'./wangchao/'.uniqid('wang_'.$sub_dir_name.'_').$tmp_file_zhui);
81         return true;
82     }
83 upload($tmp_file);

 

posted @ 2017-08-24 12:04  小油菜1  阅读(259)  评论(0编辑  收藏  举报