当前位置:Gxlcms > php框架 > PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析

PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析

时间:2021-07-01 10:21:17 帮助过:38人阅读

文件上传分为两个部分,HTML显示部分和PHP处理部分,HTML部分主要是让用户来选择所要上传的文件,然后通过PHP中的$_FILES,我们可以把文件上传到服务器的指定目录。

1.客户端页面

   客户端的配置

    1.表单页面

    2.表单发送方式为post

    3.表单form中添加enctype="multipart/form-data"

  1. <body>
  2. <form action="doaction.php" method="post" enctype="multipart/form-data">
  3. <input type="file" name="myfile">
  4. <input type="submit" value="上传">
  5. </form>
  6. </body>

2.处理页面doaction

$_FILES:文件上传变量

print_r($_FILES);

$_FILES:保存着上传文件的信息

1.name:上传文件的名称

2.type:上传文件的MIME类型

3.tmp_name:上传到服务器上的临时文件名

4.size:上传文件的大小

5.error:上传文件的错误号

  1. $filename=$_FILES['myfile']['name'];
  2. $type=$_FILES['myfile']['type'];
  3. $tmp_name=$_FILES['myfile']['tmp_name'];
  4. $size=$_FILES['myfile']['size'];
  5. $error=$_FILES['myfile']['error'];

将服务器上的临时文件移动到指定文件夹

1.move_uploaded_file(临时文件名,‘文件夹名'.$filename);   将服务器上的临时文件移动到指定文件夹,叫什么名字($filename),移动成功返回true,移动失败返回false。

  1. move_uploaded_file($tmp_name,"wenjian/".$filename);

2.copy("临时文件名","文件名".$filename)  将服务器上的临时文件拷贝到指定文件夹

文件上传配置

  1. file_uploads = on,支持HTTP上传
  2. upload_tmp_dir= ,临时文件保存的目录
  3. upload_max_filesize=2M,允许上传文件的最大值
  4. max_file_uploads=20,允许一次上传的最大文件数
  5. post_max_size=8M,post方式发送数据的最大值

3.错误信息处理

上传文件失败时,判断一下错误号,只有为0或者UPLOAD_ERR_OK,才没有错误发生,上传成功

下面是抓取错误

  1. if($error==UPLOAD_ERR_OK)
  2. {
  3. if(move_uploaded_file($tmp_name,"wenjian/".$filename))
  4. {
  5. echo "文件".$filename."上传成功";
  6. }else
  7. {
  8. echo "文件".$filename."上传失败";
  9. }
  10. }
  11. else
  12. {
  13. //匹配错误信息
  14. switch($error)
  15. {
  16. case 1:
  17. echo "上传文件超过了PHP配置文件中upload_max_filesize选项的值";
  18. break;
  19. case 2:
  20. echo "超过了表单MAX_FILE_SIZE的限制大小";
  21. break;
  22. case 3:
  23. echo "文件部分被上传";
  24. break;
  25. case 4:
  26. echo "没有选择上传文件";
  27. break;
  28. case 6:
  29. echo "没有找到临时目录";
  30. break;
  31. case 7:
  32. case 8:
  33. echo "系统错误";
  34. break;
  35. }
  36. }
  37. ?>

4.上传文件限制

《客户端限制:》

通过表单隐藏域限制上传文件的最大值

  1. <input type="hidden" name="MAX_FILE_SIZE" value="字节数">

通过accept属性限制上传文件的类型

  1. <input type="file" name="myfile" accept="文件的MIME类型">

《服务器端限制》

1.限制上传文件大小

2.限制上传文件类型

3.检测是否为真实图片类型

4.检测是否为HTTP POST方式上传

5.判断服务器上存储的文件夹在不在

6.防止重名产生覆盖

  1. <?php
  2. $fileinfo=$_FILES["myfile"];
  3. $maxsize=2097152; //写最大的字节数,自己算
  4. $allowext=array('jpeg','jpg','pnd','gif','wbmp'); //定义一下允许的上传文件类型
  5. //1.判断错误号
  6. if($fileinfo['error']==0)
  7. {
  8. //1.判断上传文件大小
  9. if($fileinfo['size']>$maxsize)
  10. {
  11. exit('上传文件过大');
  12. }
  13. //2.判断上传文件类型是不是在规定类型中
  14. $ext=strtolower(end(explode(',',$fileinfo['name'])));//截取上传文件扩展名
  15. if(!in_array($ext,$allowext)) // 判断上传文件的扩展名是不是在定义类型中
  16. {
  17. exit('非法文件类型');
  18. }
  19. //3.判断文件是否是通过HTTP POST方式上传上来的
  20. if(!is_uploaded_file($fileinfo['tmp_name']))
  21. {
  22. exit('文件不是通过HTTP POST方式上传上来的');
  23. }
  24. //4.检测是否为真实的图片类型,而不是认为改动的
  25. $flag=true;
  26. if($flag)
  27. {
  28. if(!getimagesize($fileinfo['tmp_name']))
  29. {
  30. echo "不是真实的图片类型";
  31. }
  32. }
  33. $path='uploads'; //服务器上存储文件的文件名
  34. //5.判断服务器上存储的文件夹在不在
  35. if(!file_exists($path))
  36. {
  37. mkdir($path,0777,true);//不存在就创建一个目录
  38. chmod($path,0777);//加一个权限
  39. }
  40. //6.确保文件名唯一,防止重名产生覆盖
  41. $uniname=md5(uniqid(microtime(true),true)).'.'.$ext; //通过MD5加密等措施给文件名取名
  42. $destination=$path.'/'.$uniname;
  43. if(move_uploaded_file($fileinfo['tmp_name'],$destination)) //上传文件
  44. {
  45. echo "文件上传成功";
  46. }else
  47. {
  48. echo "文件上传失败";
  49. }
  50. }else
  51. {
  52. //匹配错误信息
  53. switch($error)
  54. {
  55. case 1:
  56. echo "上传文件超过了PHP配置文件中upload_max_filesize选项的值";
  57. break;
  58. case 2:
  59. echo "超过了表单MAX_FILE_SIZE的限制大小";
  60. break;
  61. case 3:
  62. echo "文件部分被上传";
  63. break;
  64. case 4:
  65. echo "没有选择上传文件";
  66. break;
  67. case 6:
  68. echo "没有找到临时目录";
  69. break;
  70. case 7:
  71. case 8:
  72. echo "系统错误";
  73. break;
  74. }
  75. }
  76. ?>

5.完整的上传文件步骤

第一步:表单页内容

  1. <body>
  2. <form action="doaction.php" method="post" enctype="multipart/form-data">
  3. //通过表单隐藏域限制上传文件的最大值
  4. <input type="hidden" name="MAX_FILE_SIZE" value="字节数">
  5. //通过accept属性限制上传文件的类型
  6. <input type="file" name="myfile" accept="文件的MIME类型">
  7. </form>
  8. </body>

第二步:处理界面。定义变量

  1. <?php
  2. //$_FILES:文件上传变量
  3. print_r($_FILES);
  4. //$_FILES:保存着上传文件的信息
  5. /*1.name:上传文件的名称
  6. 2.type:上传文件的MIME类型
  7. 3.tmp_name:上传到服务器上的临时文件名
  8. 4.size:上传文件的大小
  9. 5.error:上传文件的错误号*/
  10. $filename=$_FILES['myfile']['name'];
  11. $type=$_FILES['myfile']['type'];
  12. $tmp_name=$_FILES['myfile']['tmp_name'];
  13. $size=$_FILES['myfile']['size'];
  14. $error=$_FILES['myfile']['error'];

 第三步:处理页面上服务器加限制和输出错误信息

1.限制上传文件大小

2.限制上传文件类型

3.检测是否为真实图片类型

4.检测是否为HTTP POST方式上传

5.判断服务器上存储的文件夹在不在

6.防止重名产生覆盖 

  1. //服务器端限制
  2. <?php
  3. $fileinfo=$_FILES["myfile"];
  4. $maxsize=2097152; //写最大的字节数,自己算
  5. $allowext=array('jpeg','jpg','pnd','gif','wbmp'); //定义一下允许的上传文件类型
  6. //1.判断错误号
  7. if($fileinfo['error']==0)
  8. {
  9. //1.判断上传文件大小
  10. if($fileinfo['size']>$maxsize)
  11. {
  12. exit('上传文件过大');
  13. }
  14. //2.判断上传文件类型是不是在规定类型中
  15. $ext=strtolower(end(explode(',',$fileinfo['name'])));//截取上传文件扩展名
  16. if(!in_array($ext,$allowext)) // 判断上传文件的扩展名是不是在定义类型中
  17. {
  18. exit('非法文件类型');
  19. }
  20. //3.判断文件是否是通过HTTP POST方式上传上来的
  21. if(!is_uploaded_file($fileinfo['tmp_name']))
  22. {
  23. exit('文件不是通过HTTP POST方式上传上来的');
  24. }
  25. //4.检测是否为真实的图片类型,而不是认为改动的
  26. $flag=true;
  27. if($flag)
  28. {
  29. if(!getimagesize($fileinfo['tmp_name']))
  30. {
  31. echo "不是真实的图片类型";
  32. }
  33. }
  34. $path='uploads'; //服务器上存储文件的文件名
  35. //5.判断服务器上存储的文件夹在不在
  36. if(!file_exists($path))
  37. {
  38. mkdir($path,0777,true);//不存在就创建一个目录
  39. chmod($path,0777);//加一个权限
  40. }
  41. //6.确保文件名唯一,防止重名产生覆盖
  42. $uniname=md5(uniqid(microtime(true),true)).'.'.$ext; //通过MD5加密等措施给文件名取名
  43. $destination=$path.'/'.$uniname;
  44. $destination=inocv("UTF-8","gb2312",$destination); //如果上传的文件名中有汉字,需要转码一下,用inocv函数,把utf-8转为gb2312.
  45. if(move_uploaded_file($fileinfo['tmp_name'],$destination)) //上传文件
  46. {
  47. echo "文件上传成功";
  48. }else
  49. {
  50. echo "文件上传失败";
  51. }
  52. }else
  53. {

第四步:匹配错误信息

  1. switch($error)
  2. {
  3. case 1:
  4. echo "上传文件超过了PHP配置文件中upload_max_filesize选项的值";
  5. break;
  6. case 2:
  7. echo "超过了表单MAX_FILE_SIZE的限制大小";
  8. break;
  9. case 3:
  10. echo "文件部分被上传";
  11. break;
  12. case 4:
  13. echo "没有选择上传文件";
  14. break;
  15. case 6:
  16. echo "没有找到临时目录";
  17. break;
  18. case 7:
  19. case 8:
  20. echo "系统错误";
  21. break;
  22. }
  23. }
  24. ?>

以上所述是小编给大家介绍的PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

人气教程排行