当前位置:Gxlcms > PHP教程 > PHP单文件、多个单文件、多文件上传函数的打包

PHP单文件、多个单文件、多文件上传函数的打包

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

PHP单文件、多个单文件、多文件上传函数的封装
  1. //表单://s.php//要在选择上传文件时能一次选择多个文件,那么就加multiple="multiple" ,还有注意下name="myFile1"和name="myFile[]"的区别,单文件、多文件上传.<meta charset="utf-8"><title>无标题文档</title>//上传函数的封装://ss.php<!--?phpheader('Content-Type:text/html;charset=utf-8');//构建上传文件信息function getFiles(){
  2. $i=0;
  3. foreach($_FILES as $file){
  4. //因为这时$_FILES是个三维数组,并且上传单文件或多文件时,数组的第一维的类型不同,这样就可以拿来判断上传的是单文件还是多文件
  5. if(is_string($file['name'])){
  6. //如果是单文件
  7. $files[$i]=$file;
  8. $i++;
  9. }elseif(is_array($file['name'])){
  10. //如果是多文件
  11. foreach($file['name'] as $key=-->$val){
  12. $files[$i]['name']=$file['name'][$key];
  13. $files[$i]['type']=$file['type'][$key];
  14. $files[$i]['tmp_name']=$file['tmp_name'][$key];
  15. $files[$i]['error']=$file['error'][$key];
  16. $files[$i]['size']=$file['size'][$key];
  17. $i++;
  18. }
  19. }
  20. }
  21. return $files;}//针对于单文件、多个单文件、多文件的上传//默认允许上传的文件只为图片类型,并且只有这些图片类型:$allowExt=array('jpeg','jpg','png','gif');并且检查上传的文件是否为真实的图片$flag=true//默认上传保存的文件夹为本地的'uploads'文件夹,允许上传文件的大小最大为2Mfunction uploadFile($fileInfo,$path='./uploads',$flag=true,$allowExt=array('jpeg','jpg','png','gif'),$maxSize=2097152){
  22. //判断错误号
  23. if($fileInfo['error']===UPLOAD_ERR_OK){
  24. //检测上传文件的大小
  25. if($fileInfo['size']>$maxSize){
  26. $res['mes']=$fileInfo['name'].'上传文件过大';
  27. }
  28. $ext=getExt($fileInfo['name']);
  29. //检测上传文件的文件类型
  30. if(!in_array($ext,$allowExt)){
  31. $res['mes']=$fileInfo['name'].'非法文件类型';
  32. }
  33. //检测是否是真实的图片类型
  34. if($flag){
  35. if(!getimagesize($fileInfo['tmp_name'])){
  36. $res['mes']=$fileInfo['name'].'不是真实图片类型';
  37. }
  38. }
  39. //检测文件是否是通过HTTP POST上传上来的
  40. if(!is_uploaded_file($fileInfo['tmp_name'])){
  41. $res['mes']=$fileInfo['name'].'文件不是通过HTTP POST方式上传上来的';
  42. }
  43. if( $res ) return $res; //如果要不显示错误信息的话,用if( @$res ) return $res;
  44. //$path='./uploads';
  45. //如果没有这个文件夹,那么就创建一
  46. if(!file_exists($path)){
  47. mkdir($path,0777,true);
  48. chmod($path,0777);
  49. }
  50. //新文件名唯一
  51. $uniName=getUniName();
  52. $destination=$path.'/'.$uniName.'.'.$ext;
  53. [email protected],也可以删除
  54. if([email protected]_uploaded_file($fileInfo['tmp_name'],$destination)){
  55. $res['mes']=$fileInfo['name'].'文件移动失败';
  56. }
  57. $res['mes']=$fileInfo['name'].'上传成功';
  58. $res['dest']=$destination;
  59. return $res;
  60. }else{
  61. //匹配错误信息
  62. //注意!错误信息没有5
  63. switch($fileInfo['error']){
  64. case 1:
  65. $res['mes'] = '上传文件超过了PHP配置文件中upload_max_filesize选项的值';
  66. break;
  67. case 2:
  68. $res['mes'] = '超过了HTML表单MAX_FILE_SIZE限制的大小';
  69. break;
  70. case 3:
  71. $res['mes'] = '文件部分被上传';
  72. break;
  73. case 4:
  74. $res['mes'] = '没有选择上传文件';
  75. break;
  76. case 6:
  77. $res['mes'] = '没有找到临时目录';
  78. break;
  79. case 7:
  80. $res['mes'] = '文件写入失败';
  81. break;
  82. case 8:
  83. $res['mes'] = '上传的文件被PHP扩展程序中断';
  84. break;
  85. }
  86. return $res;
  87. }}?>//common.ss.php<!--?php//这两函数也可以一起放到ss.php里面去//得到文件扩展名function getExt($filename){
  88. return strtolower(pathinfo($filename,PATHINFO_EXTENSION));}//产生唯一字符串function getUniName(){
  89. return md5(uniqid(microtime(true),true));}?-->//上传后文件的操作:<!--?phpheader("content-type:text/html;charset=utf-8");require_once 'ss.php';require_once 'common.ss.php';$files=getFiles();//修改允许上传文件的类型,为('jpeg','jpg','png','gif','html','txt'),也可以增加新的,如pdf,pptx等等$allowExt=array('jpeg','jpg','png','gif','html','txt');foreach($files as $fileInfo){
  90. //修改上传保存的文件夹为本地的'imooc',如果没有这个文件夹,那么就创建一个
  91. //'false'参数:不要检查上传的文件是否为真实的图片,因为要允许上传除开图片类型外的其他类型文件,如html、txt
  92. $res=uploadFile($fileInfo,'imooc',false,$allowExt);
  93. echo $res['mes'],'<br/-->';
  94. $uploadFiles[]=$res['dest'];//如果要不显示错误信息的话,用@$uploadFiles[]=$res['dest'];}$uploadFiles=array_values(array_filter($uploadFiles));//这样便于保存到数据库print_r($uploadFiles);//打印查看上传保存的结果?>

2楼ltx06昨天 20:53
『PHP单文件上传原理及上传函数的封装』和n『PHP单文件、多个单文件、多文件上传函数的封装』都是看慕课网视频整理出来的,加上了我个人的注释;在网上搜索了好多关于php文件上传的,但是还是自己整理时的最清晰
1楼ltx06昨天 20:44
对于为什么要检测是否为真实的图片,因为,用户可以通过建一个txt文件,然后修改其后缀为.jpg/png等,从而为一个图片文件,但是,这不是一个真实的图片~

人气教程排行