博客列表 >文件上传学习小结

文件上传学习小结

P粉317509817
P粉317509817原创
2022年04月30日 14:54:00632浏览

单文件上传

  1. <?php
  2. // $_FILES: PHP超全局变量数量, 保存着上传文件的全部信息
  3. /**
  4. * 1. $_FILES: 二维数组,每个元素对应一个上传的文件
  5. * 2. name: 原始文件名
  6. * 3. type: 文件类型, mime类型
  7. * 4. tmp_name: 临时目录
  8. * 5. error: 错误代码
  9. * 5. size: 文件大小(字节表示 byte)
  10. */
  11. printf('<pre>%s</pre>',print_r($_FILES,true));
  12. if(isset($_FILES['my_pic'])){
  13. $name = $_FILES['my_pic']['name'];
  14. $type = $_FILES['my_pic']['type'];
  15. $tmp = $_FILES['my_pic']['tmp_name'];
  16. $err = $_FILES['my_pic']['error'];
  17. $size = $_FILES['my_pic']['size'];
  18. // 错误处理
  19. if($err > 0){
  20. $tips = '<span style="color:red,fontsize:larger">上传失败</span>';
  21. switch($err){
  22. case 1:
  23. $tips .= '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值';
  24. break;
  25. case 2:
  26. $tips .= '文件大小超过了上传表单中MAX_FILE_SIZE最大值';
  27. break;
  28. case 3:
  29. $tips .= '文件只有部分被上传';
  30. break;
  31. case 4:
  32. $tips .= '没有文件被上传';
  33. break;
  34. case 6:
  35. $tips .= '找不到临时目录';
  36. break;
  37. case 7:
  38. $tips .= '文件写入失败,请检查目录权限';
  39. break;
  40. }
  41. echo "<p>$tips</p>";
  42. }else {
  43. // 判断用户是否是通过合法的POST方式上传
  44. if(is_uploaded_file($tmp)){
  45. // 设置允许上传类型的白名单
  46. $allow = ['jpg','png','jpeg','gif'];
  47. $ext = pathinfo($name)['extension'];
  48. // pathinfo() 函数以数组的形式返回关于文件路径的信息。
  49. // 返回的数组元素如下:
  50. // [dirname]: 目录路径
  51. // [basename]: 文件名
  52. // [extension]: 文件后缀名
  53. // [filename]: 不包含后缀的文件名
  54. if(in_array($ext,$allow)){
  55. // 满足条件,将图片转存为本地
  56. $path = 'uploads/';
  57. // 自定义文件名
  58. $dest = $path . md5($name) . '.'.$ext;
  59. // 将文件从临时目录中移动到目标目录并重命名
  60. if(move_uploaded_file($tmp,$dest)){
  61. echo '<p style="fontsize:large">上传成功</p>';
  62. echo "<img src='$dest',width='200'>";
  63. }else{
  64. echo '<p style="fontsize:large">移动失败</p>';
  65. }
  66. }
  67. else{
  68. echo '<p style="color:red">文件类型错误</p>';
  69. }
  70. }else{
  71. echo '<p style="color:red">非法方式上传</p>';
  72. }
  73. }
  74. }
  75. ?>
  76. <!DOCTYPE html>
  77. <html lang="en">
  78. <head>
  79. <meta charset="UTF-8">
  80. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  81. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  82. <title>单文件上传</title>
  83. </head>
  84. <body>
  85. <!-- 允许单文件的表单特征:
  86. 1、method为POST
  87. 2、enctype为"multipart/form-data" -->
  88. <form action="" method="POST" enctype="multipart/form-data">
  89. <fieldset>
  90. <legend>单文件上传</legend>
  91. <input type="file" name="my_pic">
  92. <button>上传</button>
  93. </fieldset>
  94. </form>
  95. </body>
  96. </html>

效果:

多文件上传

方式1

  1. <?php
  2. printf('<pre>%s</pre>',print_r($_FILES,true));
  3. if( (isset($_FILES['my_pic1'])) || (isset($_FILES['my_pic2'])) || (isset($_FILES['my_pic3'])) ){
  4. foreach($_FILES as $file){
  5. $name = $file['name'];
  6. $type = $file['type'];
  7. $tmp = $file['tmp_name'];
  8. $err = $file['error'];
  9. $size = $file['size'];
  10. // 错误处理
  11. if($err > 0){
  12. $tips = '<span style="color:red,fontsize:larger">上传失败</span>';
  13. switch($err){
  14. case 1:
  15. $tips .= '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值';
  16. break;
  17. case 2:
  18. $tips .= '文件大小超过了上传表单中MAX_FILE_SIZE最大值';
  19. break;
  20. case 3:
  21. $tips .= '文件只有部分被上传';
  22. break;
  23. case 4:
  24. $tips .= '没有文件被上传';
  25. break;
  26. case 6:
  27. $tips .= '找不到临时目录';
  28. break;
  29. case 7:
  30. $tips .= '文件写入失败,请检查目录权限';
  31. break;
  32. }
  33. echo "<p>$tips</p>";
  34. }else {
  35. // 判断用户是否是通过合法的POST方式上传
  36. if(is_uploaded_file($tmp)){
  37. // 设置允许上传类型的白名单
  38. $allow = ['jpg','png','jpeg','gif'];
  39. $ext = pathinfo($name)['extension'];
  40. // pathinfo() 函数以数组的形式返回关于文件路径的信息。
  41. // 返回的数组元素如下:
  42. // [dirname]: 目录路径
  43. // [basename]: 文件名
  44. // [extension]: 文件后缀名
  45. // [filename]: 不包含后缀的文件名
  46. if(in_array($ext,$allow)){
  47. // 满足条件,将图片转存为本地
  48. $path = 'uploads/';
  49. // 自定义文件名
  50. $dest = $path . md5($name) . '.'.$ext;
  51. // 将文件从临时目录中移动到目标目录并重命名
  52. if(move_uploaded_file($tmp,$dest)){
  53. echo '<p style="fontsize:large">上传成功</p>';
  54. echo "<img src='$dest',width='200'>";
  55. }else{
  56. echo '<p style="fontsize:large">移动失败</p>';
  57. }
  58. }
  59. else{
  60. echo '<p style="color:red">文件类型错误</p>';
  61. }
  62. }else{
  63. echo '<p style="color:red">非法方式上传</p>';
  64. }
  65. }
  66. }
  67. }
  68. ?>
  69. <!DOCTYPE html>
  70. <html lang="en">
  71. <head>
  72. <meta charset="UTF-8">
  73. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  74. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  75. <title>多文件上传1</title>
  76. </head>
  77. <body>
  78. <form action="" method="POST" enctype="multipart/form-data">
  79. <fieldset>
  80. <legend>多文件上传:逐个上传</legend>
  81. <input type="file" name="my_pic1">
  82. <input type="file" name="my_pic2">
  83. <input type="file" name="my_pic3">
  84. <button>上传</button>
  85. </fieldset>
  86. </form>
  87. </body>
  88. </html>

效果:

方式2

  1. <!DOCTYPE html>
  2. <?php
  3. printf('<pre>%s</pre>', print_r($_FILES, true));
  4. if(isset($_FILES['my_pic'])){
  5. for($i=0;$i<3;$i++){
  6. $name = $_FILES['my_pic']['name'][$i];
  7. $type = $_FILES['my_pic']['type'][$i];
  8. $tmp = $_FILES['my_pic']['tmp_name'][$i];
  9. $err = $_FILES['my_pic']['error'][$i];
  10. $size = $_FILES['my_pic']['size'][$i];
  11. if($err > 0){
  12. $tips = '<span style="color:red,fontsize:larger">上传失败</span>';
  13. switch($err){
  14. case 1:
  15. $tips .= '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值';
  16. break;
  17. case 2:
  18. $tips .= '文件大小超过了上传表单中MAX_FILE_SIZE最大值';
  19. break;
  20. case 3:
  21. $tips .= '文件只有部分被上传';
  22. break;
  23. case 4:
  24. $tips .= '没有文件被上传';
  25. break;
  26. case 6:
  27. $tips .= '找不到临时目录';
  28. break;
  29. case 7:
  30. $tips .= '文件写入失败,请检查目录权限';
  31. break;
  32. }
  33. echo "<p>$tips</p>";
  34. }
  35. else {
  36. // 判断用户是否是通过合法的POST方式上传
  37. if(is_uploaded_file($tmp)){
  38. // 设置允许上传类型的白名单
  39. $allow = ['jpg','png','jpeg','gif'];
  40. $ext = pathinfo($name)['extension'];
  41. // pathinfo() 函数以数组的形式返回关于文件路径的信息。
  42. // 返回的数组元素如下:
  43. // [dirname]: 目录路径
  44. // [basename]: 文件名
  45. // [extension]: 文件后缀名
  46. // [filename]: 不包含后缀的文件名
  47. if(in_array($ext,$allow)){
  48. // 满足条件,将图片转存为本地
  49. $path = 'uploads/';
  50. // 自定义文件名
  51. $dest = $path . md5($name) . '.'.$ext;
  52. // 将文件从临时目录中移动到目标目录并重命名
  53. if(move_uploaded_file($tmp,$dest)){
  54. echo '<p style="fontsize:large">上传成功</p>';
  55. echo "<img src='$dest',width='200'>";
  56. }else{
  57. echo '<p style="fontsize:large">移动失败</p>';
  58. }
  59. }
  60. else{
  61. echo '<p style="color:red">文件类型错误</p>';
  62. }
  63. }else{
  64. echo '<p style="color:red">非法方式上传</p>';
  65. }
  66. }
  67. }
  68. }
  69. ?>
  70. <html lang="en">
  71. <head>
  72. <meta charset="UTF-8">
  73. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  74. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  75. <title>多文件上传2</title>
  76. </head>
  77. <body>
  78. <form action="" method="POST" enctype="multipart/form-data">
  79. <fieldset>
  80. <legend>多文件上传:逐个上传2</legend>
  81. <!-- 数组来表示每个要上传的表单域的名称 -->
  82. <input type="file" name="my_pic[]">
  83. <input type="file" name="my_pic[]">
  84. <input type="file" name="my_pic[]">
  85. <button>上传</button>
  86. </fieldset>
  87. </form>
  88. </body>
  89. </html>

效果:

方式3

只需要将input标签进行multiple的设置即可
<input type="file" name="my_pic[]" multiple>

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