<body> <?php /** *驗(yàn)證錯(cuò)誤 *如果有錯(cuò),就返回錯(cuò)誤,如果沒(méi)錯(cuò),就返回null */ function check($file) { //1:驗(yàn)證是否有誤 if($file['error']!=0){ switch($file['error']) { case 1: return '文件大小超過(guò)了php.ini中允許的最大值,最大值是:'.ini_get('upload_max_filesize'); case 2: return '文件大小超過(guò)了表單允許的最大值'; case 3: return '只有部分文件上傳'; case 4: return '沒(méi)有文件上傳'; case 6: return '找不到臨時(shí)文件'; case 7: return '文件寫(xiě)入失敗'; default: return '未知錯(cuò)誤'; } } //2、驗(yàn)證格式
//第一步:創(chuàng)建finfo資源 $info=finfo_open(FILEINFO_MIME_TYPE);
//第二步:將finfo資源和文件做比較 $mime=finfo_file($info,$file['tmp_name']);
//第三步,比較是否合法 $allow=array('image/jpeg','image/png','image/gif'); //允許的類(lèi)別 if(!in_array($mime,$allow)){ return '只能上傳'.implode(',',$allow).'格式'; } //3、驗(yàn)證大小 $size=123456789; if($file['size']>$size){ return '文件大小不能超過(guò)'.number_format($size/1024,1).'K'; } //4、驗(yàn)證是否是http上傳 if(!is_uploaded_file($file['tmp_name'])) return '文件不是HTTP POST上傳的<br>'; return null; //沒(méi)有錯(cuò)誤 } //表單提交 if(!empty($_POST)) { //上傳文件過(guò)程中有錯(cuò)誤就顯示錯(cuò)誤 if($error=check($_FILES['face'])){ echo $error; }else{ //文件上傳,上傳的文件保存到當(dāng)天的文件夾中 $foldername=date('Y-m-d'); //文件夾名稱(chēng) $folderpath="./uploads/{$foldername}"; //文件夾路徑 if(!is_dir($folderpath)) mkdir($folderpath); $filename=uniqid('',true).strrchr($_FILES['face']['name'],'.'); //文件名 $filepath="$folderpath/$filename"; //文件路徑 if(move_uploaded_file($_FILES['face']['tmp_name'],$filepath)) echo "上傳成功,路徑是:{$foldername}/{$filename}"; else echo '上傳失敗<br>'; } } ?> <form method="post" action="" enctype='multipart/form-data'> <input type="file" name="face"> <input type="submit" name="button" value="上傳"> </form> </body>
運(yùn)行結(jié)果
防治文件偽裝需要在php.ini中開(kāi)啟fileinfo.dll擴(kuò)展,開(kāi)啟fileinfo擴(kuò)展以后,就可以使用finfo_*的函數(shù)。
聯(lián)系客服