博客列表 >PHP单条上传,批量上传,上传异常类

PHP单条上传,批量上传,上传异常类

阿心
阿心原创
2020年05月13日 23:15:26570浏览

单条文件上传

  1. <?php
  2. require $_SERVER['DOCUMENT_ROOT'].'/0511/class/upload.class.php';
  3. ?>
  4. <!DOCTYPE html>
  5. <html lang="en">
  6. <head>
  7. <meta charset="UTF-8">
  8. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  9. <title>上传测试</title>
  10. </head>
  11. <body>
  12. <!-- 上传提交属性必须是POST -->
  13. <!-- multipart/form-data,它会将表单的数据处理为一条消息,以标签为单元,用分隔符分开。既可以上传键值对,也可以上传文件。 -->
  14. <form action="" method='POST' enctype='multipart/form-data'>
  15. <legend>单文件上传测试变量$_FILES;</legend>
  16. <!-- 隐藏域限制上传大小 类型file-->
  17. <input type="hidden" name='MAX_FILE_SIZE' value='200000'>
  18. <input type="file" name='pic'>
  19. <button>上传</button>
  20. </form>
  21. <hr>
  22. <form action="" method='post' enctype="multipart/form-data">
  23. <legend></legend>
  24. </form>
  25. </body>
  26. </html>

单条引入文件upload.class.php

  1. <?php
  2. //使用$_FILES变量来接受数据
  3. printf('<pre>%s</pre>',print_r($_FILES,true));
  4. // echo ini_get('upload_max_filesize');
  5. //检查是否有上传
  6. $error= $_FILES['pic']['error'];
  7. // echo $error;
  8. //没有文件的函数 UPLOAD_ERR_NO_FILE;
  9. //检查文件类型
  10. if($_POST){
  11. if(UPLOAD_ERR_NO_FILE === $error){
  12. echo "没有上传文件<br>";
  13. }
  14. $fileType=$_FILES['pic']['type'];
  15. //strstr — 查找字符串的首次出现(stristr忽略大小写)
  16. //检查是否为POST提交
  17. $temFile=$_FILES['pic']['tmp_name'];//临时文件名
  18. $sourceFile=$_FILES['pic']['name'];//源文件名
  19. // echo $temFile.$sourceFile;
  20. //is_uploaded_file — 判断文件是否是通过 HTTP POST 上传的
  21. if(stristr($fileType,'/',true) !=='image')
  22. {
  23. echo "$sourceFile 非法请求!";
  24. }elseif(is_uploaded_file($temFile)){
  25. echo "$sourceFile 上传成功";
  26. }
  27. // ini_get — 获取一个配置选项的值
  28. //ini_set 临时更改php.ini上传大小
  29. //这里限制大小非常有必要,避免通过浏览器修改上传
  30. ini_set('upload_max_filesize','1M');
  31. switch($error){
  32. case 1:
  33. echo '文件大小不符';
  34. break;
  35. case 2:
  36. echo '文件大小不符';
  37. }
  38. }

单条上传+异常处理

  1. <?php
  2. require 'class/upload.class1.php';
  3. ?>
  4. <!DOCTYPE html>
  5. <html lang="en">
  6. <head>
  7. <meta charset="UTF-8">
  8. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  9. <title>单文件上传$_FILES</title>
  10. </head>
  11. <body>
  12. <form action="" method='POST' enctype='multipart/form-data'>
  13. <fieldset>
  14. <legend>单文件上传异常处理</legend>
  15. <input type="hidden" name='MAX_FILE_SIZE' value='200000'>
  16. <input type="file" name='pic'>
  17. <button>上传</button>
  18. </fieldset>
  19. </form>
  20. </body>
  21. </html>

单条上传+异常处理类文件upload1.class.php

  1. <?php
  2. //单文件上传异常类
  3. printf('<pre>%s</pre>',print_r($_FILES,true));
  4. //自定义上传异常类
  5. class UploadException extends Exception
  6. {
  7. //在异常类中可访问并重写Exception中的四个属性。通过__toString()格式化输出
  8. public function __toString()
  9. {
  10. return <<< UPLOAD
  11. <style>
  12. table{border-collapse:collapse;border:1px soild #CCC;text-align:center;}
  13. td{border:1px solid #CCC;padding:1px;}
  14. tr:first-of-type{background:#333;}
  15. tr:last-of-type{color:#DDD;}
  16. </style>
  17. <table>
  18. <tr>
  19. <td>代码</td>
  20. <td>信息</td>
  21. <td>文件</td>
  22. <td>行号</td>
  23. </tr>
  24. <tr>
  25. <td>$this->code</td>
  26. <td>$this->message</td>
  27. <td>$this->file</td>
  28. <td>$this->line</td>
  29. </tr>
  30. </table>
  31. UPLOAD;
  32. }
  33. }
  34. try{
  35. //获取文件
  36. $errorCode= $_FILES['pic']['error'];
  37. if($errorCode > UPLOAD_ERR_OK)
  38. {
  39. switch ($errorCode)
  40. {
  41. //case视乎不能用数字表示。
  42. case UPLOAD_ERR_INI_SIZE:
  43. throw new UploadException('文件过大',1);
  44. break;
  45. case UPLOAD_ERR_FORM_SIZE:
  46. throw new UploadException('文件过大');
  47. break;
  48. case UPLOAD_ERR_PARTIAL:
  49. throw new UploadException('文件只有部分上传了');
  50. break;
  51. case UPLOAD_ERR_NO_FILE:
  52. throw new UploadException('没有上传文件',4);
  53. break;
  54. case UPLOAD_ERR_NO_TMP_DIR:
  55. throw new UploadException('找不到临时文件');
  56. break;
  57. case UPLOAD_ERR_CANT_WRITE:
  58. throw new UploadException('文件写入失败');
  59. break;
  60. default:
  61. throw new UploadException('未知错误');
  62. }
  63. }
  64. if($_POST){
  65. $fileType=$_FILES['pic']['type'];
  66. if(strstr($fileType,'/', true) !=='image'){
  67. throw new UploadException('文件类型错误');
  68. }
  69. $temFile=$_FILES['pic']['tmp_name'];//临时
  70. // is_uploaded_file — 判断文件是否是通过 HTTP POST 上传的
  71. if(is_uploaded_file($temFile)){
  72. // 判断是否post请求并移动到指定目录
  73. $sourcFile=$_FILES['pic']['name'];//原文件
  74. //目录路径
  75. $FilePath='uploads/'.md5(time().mt_rand(1,99999)).strstr($sourcFile,'.');//。加密获取扩展名
  76. // echo $FilePath;die;
  77. // move_uploaded_file — 将上传的文件移动到新位置
  78. if(move_uploaded_file($temFile,$FilePath)){
  79. echo " $sourcFile '上传成功'";
  80. echo "<img src='{$FilePath}' width='100px'>";
  81. }
  82. }
  83. }
  84. }catch(UploadException $e){
  85. echo $e;
  86. }

批量上传

  1. <?php
  2. // require 'class/uploads.class.php';
  3. //printf('<pre>%s</pre>',print_r($_FILES,true));
  4. if($_FILES['pic'])
  5. {
  6. foreach($_FILES['pic']['error'] as $key=>$error) {
  7. if($error === UPLOAD_ERR_OK){
  8. $temFile = $_FILES['pic']['tmp_name'][$key];
  9. $sourceFile = $_FILES['pic']['name'][$key];
  10. $PathFile = 'uploads/'.md5(time().mt_rand(1,9999)).strstr($sourceFile,'.');
  11. //移动文件
  12. move_uploaded_file($temFile,$PathFile);
  13. echo "<img src='{$PathFile}' width='100px'> ";
  14. }
  15. }
  16. }
  17. ?>
  18. <!DOCTYPE html>
  19. <html lang="en">
  20. <head>
  21. <meta charset="UTF-8">
  22. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  23. <title>批量上传图片</title>
  24. </head>
  25. <body>
  26. <form action="" method="POST" enctype='multipart/form-data'>
  27. <fieldset>
  28. <legend>批量上传图片</legend>
  29. <input type="hidden" name='MAX_FILE_SIZE' value='200000'>
  30. <!-- multiple 批量上传属性 -->
  31. <input type="file" name="pic[]" multiple>
  32. <button>上传</button>
  33. </fieldset>
  34. <fieldset>
  35. <legend>单个批量上传图片</legend>
  36. <input type="hidden" name='MAX_FILE_SIZE' value='200000'>
  37. <!-- multiple 批量上传属性 只是少了一个multiple属性 -->
  38. <input type="file" name="pic[]" >
  39. <input type="file" name="pic[]" >
  40. <input type="file" name="pic[]" >
  41. <button>上传</button>
  42. </fieldset>
  43. </form>
  44. </body>
  45. </html>

总结:抄了两天作业也没看懂怎么回事。尤其是批量上传异常处理更加是摸不着头脑该怎么弄了。

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