php 上传文件并对上传的文件进行简单验证(错误信息,格式(防伪装),大小,是否为http上传)
<body> <?php /** *验证错误 *如果有错,就返回错误,如果没错,就返回null */ function check($file) { //1:验证是否有误 if($file['error']!=0){ switch($file['error']) { case 1: return '文件大小超过了php.ini中允许的最大值,最大值是:'.ini_get('upload_max_filesize'); case 2: return '文件大小超过了表单允许的最大值'; case 3: return '只有部分文件上传'; case 4: return '没有文件上传'; case 6: return '找不到临时文件'; case 7: return '文件写入失败'; default: return '未知错误'; } } //2、验证格式
//第一步:创建finfo资源 $info=finfo_open(FILEINFO_MIME_TYPE);
//第二步:将finfo资源和文件做比较 $mime=finfo_file($info,$file['tmp_name']);
//第三步,比较是否合法 $allow=array('image/jpeg','image/png','image/gif'); //允许的类别 if(!in_array($mime,$allow)){ return '只能上传'.implode(',',$allow).'格式'; } //3、验证大小 $size=123456789; if($file['size']>$size){ return '文件大小不能超过'.number_format($size/1024,1).'K'; } //4、验证是否是http上传 if(!is_uploaded_file($file['tmp_name'])) return '文件不是HTTP POST上传的<br>'; return null; //没有错误 } //表单提交 if(!empty($_POST)) { //上传文件过程中有错误就显示错误 if($error=check($_FILES['face'])){ echo $error; }else{ //文件上传,上传的文件保存到当天的文件夹中 $foldername=date('Y-m-d'); //文件夹名称 $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>
运行结果
防治文件伪装需要在php.ini中开启fileinfo.dll扩展,开启fileinfo扩展以后,就可以使用finfo_*的函数。