登录  /  注册
博主信息
博文 98
粉丝 1
评论 0
访问量 77982
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
文件上传学习
阿杰
原创
789人浏览过

单文件上传

  1. 表单上传
    1. <form action="" method="post" enctype="multipart/form-data">
    2. <fieldset>
    3. <legend>单文件上传</legend>
    4. <!-- 前端设置上传文件的大小:字节 -->
    5. <!-- <input type="hidden" name="MAX_FILE_SIZE" value="5600"> -->
    6. <input type="file" name="my_pic" id="">
    7. <button>上传</button>
    8. </fieldset>
    9. </form>
  2. 查看上传信息
    1. // $_FILES: 文件上传变量,超全局的变量数组, 保存着所有与文件上传的相关信息
    2. printf('<pre>%s</pre>', print_r($_FILES, true));

自定义异常类

  1. 自定义文件上传的异常类
    1. // 自定义文件上传的异类处理类
    2. class UploadException extends Exception
    3. {
    4. public function __toString()
    5. {
    6. return <<<UPLOAD
    7. <table>
    8. <tr>
    9. <td>编号</td>
    10. <td>信息</td>
    11. <td>文件</td>
    12. <td>行号</td>
    13. </tr>
    14. <tr>
    15. <td>$this->code</td>
    16. <td>$this->message</td>
    17. <td>$this->file</td>
    18. <td>$this->line</td>
    19. </tr>
    20. </table>
    21. <style>
    22. table {border-collapse: collapse;border:1px solid black;text-align: center;}
    23. td {border:1px solid black;padding: 5px;}
    24. tr:first-of-type {background-color:#eee;}
    25. tr:last-of-type td {color: red;}
    26. </style>
    27. UPLOAD;
    28. }
    29. }
  2. 调用异常类

    1. try
    2. {
    3. // 1.对错误代码的判断
    4. $errorCode = $_FILES['my_pic']['error'] ?? null;
    5. // 使用系统常量进行判断
    6. if($errorCode>UPLOAD_ERR_OK){
    7. switch ($errorCode){
    8. case UPLOAD_ERR_INI_SIZE:
    9. throw new UploadException('上传的文件超过了php.ini 中 upload_max_filesize 选项限制的值',1);
    10. break;
    11. case UPLOAD_ERR_FORM_SIZE:
    12. throw new UploadException('上传的文件超出了表单中设置的大小',2);
    13. break;
    14. case UPLOAD_ERR_PARTIAL:
    15. throw new UploadException('文件只有部分被上传', 3);
    16. break;
    17. case UPLOAD_ERR_NO_FILE:
    18. throw new UploadException('没有文件被上传', 4);
    19. break;
    20. case UPLOAD_ERR_NO_TMP_DIR:
    21. throw new UploadException('找不到临时文件夹', 5);
    22. break;
    23. case UPLOAD_ERR_CANT_WRITE:
    24. throw new UploadException('文件写入失败', 6);
    25. break;
    26. default:
    27. // 测试时建议关掉default: 避免误报影响
    28. throw new UploadException('未知类型错误', 7);
    29. }
    30. }
    31. // 2.判断文件类型是否正确
    32. $fileType = $_FILES['my_pic']['type'] ?? null;
    33. $type = strstr($fileType,'/',true);
    34. if(!is_null($fileType)){
    35. if($type!=='image') throw new UploadException('上传类型错误',8);
    36. }
    37. }catch(UploadException $e){
    38. echo $e;
    39. }



  3. 单文件(图片上传)
  • 先准备一个存放上传文件的文件

  • 把临时文件上传到目标目录
  1. // 判断上传方式是否正确?
  2. // 临时文件名
  3. $tmplFileName = $_FILES['my_pic']['tmp_name'] ?? null;
  4. // 1. 首先临时文件是存在的,并且必须是通过POST上传的
  5. if ($tmplFileName && is_uploaded_file($tmplFileName)) {
  6. // 2. 将文件从临时目录移动到目标目录中: uploads/
  7. // move_uploaded_file(临时文件, 目标文件名)
  8. // 原始文件名
  9. $originalFileName = $_FILES['my_pic']['name'] ?? null;
  10. echo strstr($originalFileName, '.');
  11. // 目标文件名
  12. $destFileName = 'uploads/' . md5(time(). mt_rand(1,1000)) .strstr($originalFileName, '.');
  13. if (move_uploaded_file($tmplFileName, $destFileName)) {
  14. echo '<p>'. $_FILES['my_pic']['name'].': 上传成功</p>';
  15. // 预览图片
  16. echo "<img src='{$destFileName}' width='200'>";
  17. }
  18. }


多文件上传

  1. 文件批量上传中缺失的异常处理, 文件类型处理等操作

    1. <form action="" method="post" enctype="multipart/form-data">
    2. <fieldset>
    3. <legend>批量上传文件</legend>
    4. <input type="file" name="my_pic1" id="">
    5. <input type="file" name="my_pic2" id="">
    6. <input type="file" name="my_pic3" id="">
    7. <button>上传</button>
    8. </fieldset>
    9. </form>
    1. foreach ($_FILES as $k=>$file) {
    2. // echo $k;
    3. try
    4. {
    5. // 1.对错误代码的判断
    6. $errorCode = $_FILES[$k]['error'] ?? null;
    7. // 使用系统常量进行判断
    8. if($errorCode>UPLOAD_ERR_OK){
    9. switch ($errorCode){
    10. case UPLOAD_ERR_INI_SIZE:
    11. throw new UploadException('上传的文件超过了php.ini 中 upload_max_filesize 选项限制的值',1);
    12. break;
    13. case UPLOAD_ERR_FORM_SIZE:
    14. throw new UploadException('上传的文件超出了表单中设置的大小',2);
    15. break;
    16. case UPLOAD_ERR_PARTIAL:
    17. throw new UploadException('文件只有部分被上传', 3);
    18. break;
    19. case UPLOAD_ERR_NO_FILE:
    20. throw new UploadException('没有文件被上传', 4);
    21. break;
    22. case UPLOAD_ERR_NO_TMP_DIR:
    23. throw new UploadException('找不到临时文件夹', 5);
    24. break;
    25. case UPLOAD_ERR_CANT_WRITE:
    26. throw new UploadException('文件写入失败', 6);
    27. break;
    28. default:
    29. // 测试时建议关掉default: 避免误报影响
    30. throw new UploadException('未知类型错误', 7);
    31. }
    32. }
    33. // 2.判断文件类型是否正确
    34. $fileType = $_FILES[$k]['type'] ?? null;
    35. $type = strstr($fileType,'/',true);
    36. if(!is_null($fileType)){
    37. if($type!=='image') throw new UploadException('上传类型错误',8);
    38. }
    39. }catch(UploadException $e){
    40. echo $e;
    41. }
    42. }

  2. 文件批量上传
    1. if($file['error']===0){
    2. $destFileName = 'uploads/' . md5(time().mt_rand(1,1000)) . strstr($file['name'],'.');
    3. if(move_uploaded_file($file['tmp_name'],$destFileName)){
    4. echo $file['name'].':上传成功!'.'<hr>';
    5. // 预览图片
    6. echo "<img src='{$destFileName}' width='200'>";
    7. }
    8. }

*封装一个文件上传类,可同时处理单文件与多文件上传(还在进一步学习)

批改老师:天蓬老师天蓬老师

批改状态:合格

老师批语:写得棒棒
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学