gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 24 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

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

1.客户端页面 。

   客户端的配置 。

    1.表单页面 。

    2.表单发送方式为post 。

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

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

2.处理页面doaction 。

$_FILES:文件上传变量 。

print_r($_FILES),

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

1.name:上传文件的名称 。

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

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

4.size:上传文件的大小 。

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

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

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

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

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

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

文件上传配置 。

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

3.错误信息处理 。

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

下面是抓取错误 。

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

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

5.完整的上传文件步骤 。

第一步:表单页内容 。

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

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

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

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

1.限制上传文件大小 。

2.限制上传文件类型 。

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

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

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

6.防止重名产生覆盖  。

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

第四步:匹配错误信息 。

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

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

原文链接:http://www.cnblogs.com/xingyue1988/p/6277002.html 。

最后此篇关于PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析的文章就讲到这里了,如果你想了解更多关于PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com