博客列表 >PHP文件上传函数封装

PHP文件上传函数封装

缘亦
缘亦原创
2021年08月23日 15:20:24687浏览

PHP文件上传函数封装

  1. <?php
  2. function uploadFile( $fileInfo, $uploadPath = './attachment', $flag = true, $allowExt = ['jpg', 'png', 'wbmp', 'gif', 'jpeg', 'bmp'], $maxSize = 2097152 ) {
  3. if ( $fileInfo['error'] == 0 ) {
  4. $arr = explode( '.', $fileInfo['name'] );
  5. //explode 分割字符串,以.点分割
  6. $ext = end( $arr );
  7. //取后缀名
  8. $prefix = array_shift( $arr );
  9. //取文件名
  10. if ( !in_array( $ext, $allowExt ) ) {
  11. //判断后缀是否存在
  12. return $res = '文件类型不合法';
  13. }
  14. if ( $fileInfo['size'] > $maxSize ) {
  15. //判断文件大小
  16. return $res = '文件大小超过限制的最大值';
  17. }
  18. if ( !getimageSize( $fileInfo['tmp_name'] ) ) {
  19. //检测图片是否合法
  20. return $res = '请勿上传非法图片';
  21. }
  22. if ( !is_uploaded_file( $fileInfo['tmp_name'] ) ) {
  23. //检测上传方式是否为http post
  24. return $res = '上传方式错误:请使用http post 方式上传';
  25. }
  26. //定义存储文件目录, 按年月规类存放
  27. $uploadPath = $uploadPath . '/' . date( 'Y' ) . '/' . date( 'm' ) ;
  28. if ( !file_exists( $uploadPath ) ) {
  29. //file_exists判断目录是否存在
  30. mkdir( $uploadPath, 0770, true );
  31. //mkdir创建目录,参数0770为权限
  32. chmod( $uploadPath, 0770 );
  33. //为以防万一,再次修改权限为0770
  34. }
  35. $des = $uploadPath . '/'.md5( $prefix.time() ).'.'.$ext;
  36. //将散列后的文件名,与后缀拼接。( $prefix.time()拼接为原文件名+时间戳,md5 在将其散列形成独一无二的文件名,避免用户上传相同文件名的文件导致出现问题 )
  37. // echo $des;
  38. //调试用
  39. $moveResult = move_uploaded_file( $fileInfo['tmp_name'], $des );
  40. //参数:将$fileInfo['tmp_name']临时文件,复制到$des,
  41. if ( !$moveResult ) {
  42. $res['error'] = '文件移动失败';
  43. } else {
  44. $res['info'] = $fileInfo['name'] . '上传成功';
  45. $res['fileRealPath'] = $des;
  46. }
  47. return $res;
  48. } else {
  49. switch( $fileInfo['error'] ):
  50. case 1:
  51. echo '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值';
  52. break;
  53. case 2:
  54. echo '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值';
  55. break;
  56. case 3:
  57. echo '文件只有部分被上传';
  58. break;
  59. case 4:
  60. echo '没有文件被上传。 是指表单的file域没有内容,是空字符串';
  61. break;
  62. case 6:
  63. echo '找不到临时文件夹';
  64. break;
  65. default:
  66. echo '系统错误';
  67. endswitch;
  68. }
  69. }

上传表单

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7. <title>文件上传</title>
  8. </head>
  9. <body>
  10. <form
  11. action="upload/uploads.php"
  12. method="post"
  13. enctype="multipart/form-data"
  14. >
  15. <fieldset>
  16. <legend>文件上传</legend>
  17. <label for="my_file"></label>
  18. <input type="file" name="my_file" id="my_file" />
  19. <button>上传</button>
  20. </fieldset>
  21. </form>
  22. </body>
  23. </html>

成功上传文件,并按年/月分类存放

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议