1. 程式人生 > >100)PHP,文件上傳總代碼整理

100)PHP,文件上傳總代碼整理

input 文件夾 inf add mime 映射 pos span 臨時

首先是我的目錄關系:
    

    技術分享

然後我的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);

100)PHP,文件上傳總代碼整理