博客列表 >12月09号:文件上传

12月09号:文件上传

Rambo-Yang
Rambo-Yang原创
2019年12月10日 11:00:09598浏览

index.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>文件上传</title>
  6. </head>
  7. <body>
  8. <form action="demo.php" method="post" enctype="multipart/form-data">
  9. <input type="file" name="my_file">
  10. <button>提交</button>
  11. </form>
  12. </body>
  13. </html>

demo.php

  1. //print_r($_FILES);
  2. //Array
  3. //(
  4. // [my_file] => Array
  5. // (
  6. // [name] =>
  7. // [type] =>
  8. // [tmp_name] =>
  9. // [error] => 4
  10. // [size] => 0
  11. // )
  12. //)
  13. //设置时区
  14. ini_set('date.timezone','Asia/Shanghai');
  15. //判断上传文件是否存在
  16. if (empty($_FILES['my_file']['tmp_name'])) {
  17. echo '<script>alert("请选择上传的文件");location.assign("index.html");</script>';
  18. exit;
  19. }
  20. //1,配置上传参数
  21. //设置允许上传的文件类型
  22. $fileType = ['jpg','jpeg','png','gif'];
  23. //设置允许上传的最大文件长度
  24. $fileSize = 3145728;
  25. //上传到服务器上指定的目录
  26. $filePath = '/uploads/';
  27. //上传的原始文件名
  28. $fileName = $_FILES['my_file']['name'];
  29. //上传保存在服务器上的临时文件名
  30. $tempFile = $_FILES['my_file']['tmp_name'];
  31. //2,判断上传是否成功
  32. $uploadError = $_FILES['my_file']['error'];
  33. if ($uploadError > 0){
  34. switch ($uploadError){
  35. case 1:
  36. case 2:die('上传文件不允许超过3M');
  37. case 3:die('上传文件不完整');
  38. case 4:die('没有文件被上传');
  39. case 6:die('找不到临时文件夹');
  40. case 7:die('文件写入失败');
  41. default: die('未知错误');
  42. }
  43. }
  44. //3.判断文件扩展名是否正确
  45. //strrchr() 函数查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符
  46. //strrpos() 查找 "." 在字符串中最后一次出现的位置,返回位置 substr($fileName, strrpos($file, '.')+1);从该位置开始截取
  47. $extension = substr(strrchr($fileName, '.'), 1);
  48. if (!in_array($extension, $fileType)){
  49. die('不允许上传'. $extension . '文件类型');
  50. }
  51. //限制上传文件大小
  52. if ($_FILES["my_file"]["size"] > $fileSize){
  53. echo '<script>alert("上传文件不允许超过3M");location.assign("index.html");</script>';
  54. exit;
  55. }
  56. //4,文件重命名,为了防止同名文件相互覆盖,应该讲上传到指定目录的文件重命名,例如用md5+时间戳
  57. $fileName = date('YmdHis',time()).md5(mt_rand(1,99)). '.' . $extension;
  58. //5,判断文件是否上传成功
  59. //is_uploaded_file() 函数检查指定的文件是否是通过 HTTP POST 上传的。
  60. if (is_uploaded_file($tempFile)){
  61. if (move_uploaded_file($tempFile, __DIR__ . $filePath . $fileName)){
  62. echo '<script>alert("上传成功");history.back();</script>';
  63. }else{
  64. die('文件无法移动到指定目录,请检查目录权限');
  65. }
  66. }else{
  67. die('非法操作');
  68. }

总结:

  • 接收文件上传信息用$_FILES这个全局变量
  • 获取文件扩展名可以用explode()切割字符串,也可以用strrchr()查找特征字符串出现的位置再截取
  • is_uploaded_file() 函数检查指定的文件是否是通过 HTTP POST 上传的
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议