Maison >développement back-end >tutoriel php >php实现文件上传与下载(中)_PHP教程
1 <?php 2 header('content-type:text/html;charset=utf-8'); 3 4 function upload($fileInfo,$allowExt = array('jpeg', 'jpg', 'png', 'gif', 'pdf'), $maxSize = 2097152, $path = 'text', $flag = true) 5 { 6 $fileInfo = $_FILES['file1']; 7 // $maxSize = 2097152; // 允许上传的最大字节数2M 8 // $flag = true; // 检测是否真实类型 9 // 允许上传的文件类型,直接放在参数里了 10 // $allowExt = array( 11 // 'jpeg', 12 // 'png', 13 // 'png', 14 // 'gif', 15 // 'pdf' 16 // ); 17 if(!is_array($allowExt)){ 18 exit('系统错误'); 19 } 20 // 1、判断错误号 21 if ($fileInfo['error'] == 0) { 22 // 判断上传文件的大小www.Bkjia.com 23 if ($fileInfo['size'] > $maxSize) { 24 exit('上传文件过大'); 25 } 26 // 判断文件类型:两种方法--使用截取后缀名或者用自带扩展名的判定来判定 27 $ext = pathinfo($fileInfo['name'], PATHINFO_EXTENSION); 28 $ext = strtolower(end(explode('.', $fileInfo['name']))); 29 if (! in_array($ext, $allowExt)) { 30 exit('非法文件类型'); 31 } 32 // 判断文件是否通过http post方式穿上的 33 if (! is_uploaded_file($fileInfo['tmp_name'])) { 34 exit('文件不是通过http post方法传上来的'); 35 } 36 if ($flag) { 37 if (! getimagesize($fileInfo['tmp_name'])) { 38 exit('不是真正的图片类型'); 39 } 40 } 41 // 上传文件,先判定路径是否存在,如果不存在则建立 42 // $path = 'text'; 43 if (! file_exists($path)) { 44 mkdir($path, 0777, true); 45 chmod($path, 0777); 46 } 47 48 // 要确保文件名唯一,防止重名产生覆盖,使用加密函数md5,mcrotime表示微秒数,两个参数则为true; 49 $uniName = md5(uniqid(microtime(true), true)) . '.' . $ext; 50 // 测试是否可以加密输出 echo $uniName; 51 // exit(); 52 $destination = $path . '/' . $uniName; 53 if (move_uploaded_file($fileInfo['tmp_name'], $destination)) { 54 // echo '上传成功';可以不仅仅是显示返回成功,可以返回文件的信息内容等 55 // return array( 56 // 'newName' => $destination, 57 // 'size' => $fileInfo['size'], 58 // 'type' => $fileInfo['type'] 59 // ); 60 return $destination; 61 //如果只要一个文件名,则return $destination即可 62 } else { 63 echo '上传失败'; 64 } 65 } else { 66 // 匹配错误信息,与err号应该一一对应的 67 switch ($fileInfo['error']) { 68 case 1: 69 $remindMes= '上传文件超过了php配置文件中upload_max_filesize选项的值'; 70 break; 71 case 2: 72 $remindMes= '上传文件超过了表单max_file_size选项的值'; 73 break; 74 case 3: 75 $remindMes= '文件部分被上传'; 76 break; 77 case 4: 78 $remindMes= '没有选择上传文件'; 79 break; 80 case 6: 81 $remindMes= '沒有找到临时目录'; 82 break; 83 case 7: 84 85 case 8: 86 $remindMes= '系统错误'; 87 break; 88 } 89 exit($remindMes); 90 } 91 }