当前位置:Gxlcms > PHP教程 > php实现文件上传与下载(中)_PHP教程

php实现文件上传与下载(中)_PHP教程

时间:2021-07-01 10:21:17 帮助过:15人阅读

php实现文件上传与下载(中)


出现不想让用户看见的信息,可以使用错误抑制符号@;当然能echo的东西都是可以赋值给一个变量的; 定义用户上传文件类型,将其放在数组变量allowExt中,用if(!in_array(第一个参数为获取上传文件的后缀名,可以使用strtolower函数来判定 点号‘ .’之后的后缀名,或者也可以用自带扩展函数pathinfo(file的名字,PATHINFO_EXTENSION)来判定,第二个参数就是允许上传的类型的数组变量allowExt);但是这种情况下,用户万一上传上来一个病毒信息,只是改了后缀名,就要用到getimagesize来获取图片的信息,基本信息会有图片的宽度和高度以及类型,部分还会有channel和bits;如果允许用户上传的不仅仅是图片类型,则使用flag的布尔值进行判定; 还要注意的是用户上传的文件的命名,不能存在重名覆盖现象,可以使用md5(uniqid(microtime(true),true))或类似函数进行判定; 有的时候用户需要上传到自己的某个目录下,则可以用if(!files_exit(path))进行判定,不存在就用mkdir ($path,0777,true)来自定义上传的路径; 在各种判定之后,可以将这个文件封装成一个函数,将下文中会使用到的变量设置为该函数的参数,在调用时可以传参,在单文件多文件上传的时候可以直接调用函数即可,大大简化代码量; 单文件上传基本思路也就是:先检测错误信息,一一匹配,用switch……case输出对应的错误信息------》检测文件上传的类型是否是自己定义的数组中的某一个-----》检测上传文件是否满足规范中的大小要求----》检测文件图片等内容是否是真实的图片类型等(用flag和getimagesize获取信息)----》检测文件是否通过http post方法传上来的----》定义文件上传进来的名字和路径(此时需要检测路径是否存在以及同名文件是否存在,采用加密方式重命名)---》上传成功,返回具体的数组变量或者上传文件名。
 1  $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 }


www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1066541.htmlTechArticlephp实现文件上传与下载(中) 出现不想让用户看见的信息,可以使用错误抑制符号@;当然能echo的东西都是可以赋值给一个变量的; 定义用...

人气教程排行