100)PHP,文件上傳總代碼整理
阿新 • • 發佈:2017-08-24
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,文件上傳總代碼整理