php文件上传原理与实现方法详解

吾爱主题 阅读:98 2021-09-24 14:21:00 评论:0

本文实例讲述了php文件上传原理与实现方法。分享给大家供大家参考,具体如下:

文件上传实际上就是在前段使用一个form表单提交本地文件到服务器,然后在服务器端将文件从临时目录转移到指定目录的过程。

1、php配置文件

php.ini文件中的file uploads部分定义了相关文件上传配置,

  • file_uploads = On 打开文件上传
  • upload_tmp_dir =临时目录
  • upload_max_filesize = 2M最大上传大小
  • max_file_uploads = 20单次最大上传文件数

2、前端表单

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

当使用由文件上传控件的表单时,必须将form的enctype设置为"multipart/form-data"。

可以在客户端对上传文件的大小与类型进行限制:

?
1 2 < input type = "hidden" name = "MAX_FILE_SIZE" value = "8096" > < input type = "file" name = "myfile" accept = "image/jpeg,image/png" >

3、后台处理

上传后会在服务器端得到一个$_FILES文件数组如下:

上传到服务器的临时文件默认保存在php.ini中upload_tmp_dir所设置的目录下,我们需要将文件移动到指定位置:

?
1 2 3 4 5 6 7 8 9 10 <?php    header( 'Content-type:text/html;charset=utf-8' );    $myfile = $_FILES [ 'myfile' ];    //获取文件数组['myfile']的属性tmp_name与name    $tmp = $myfile [ 'tmp_name' ];    $picname = $myfile [ 'name' ];    //windows采用GBK编码,php采用utf-8编码,需要改变文件名的编码格式    $picname =iconv( 'utf-8' , 'GBK' , $picname );    //将零时文件$tmp移动到指定目录userpic并命名为$picname    copy ( $tmp , "userpic/" . $picname );

 

file_uploads=On 开启HTTP上传
upload_tmp_dir 临时文件保存目录
upload_max_filesize=2M 最大上传文件大小
post_max_size=8M POST方式传输最大数据值
max_file_uploads 一次上传最大文件数
memory_limit=128M 单线程最大内存占用量
max_excution_time=-1 脚本解析所允许的最大执行时间(s),默认为-1未开启

 

4、错误处理

对file数组中的error属性进行判断处理:

?
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 $error = $myfile [ 'myfile' ][ 'error' ];    if ( $error ==0){ //为0,代表上传成功      if (move_uploaded_file( $tmp , "userpic/" . $picname )) {        echo "移动文件成功" ;      } else {        echo "移动文件失败" ;      }    } else { //不为0,匹配错误信息      switch ( $error ){        case 1:          echo "超过文件最大上传限制" ; //php.ini中upload_max_filesize          break ;        case 2:          echo "超过表单文件大小限制" ; //HTML表单中MAX_FILE_SIZE选项          break ;        case 3:          echo "文件部分被上传" ;          break ;        case 4:          echo "未选择上传文件" ;          break ;        case 7: //文件写入失败        case 8:          echo "系统错误" ;          break ;      }    }

5、上传限制

在前端可以对上传的文件类型,大小进行限制:

?
1 2 3 4 <!--表单隐藏域对上传大小进行限制--> < input type = "hidden" name = "MAX_FILE_SIZE" value = "2097152" > <!--accept 对文件类型限制--> < input type = "file" name = "myfile" accept = "image/jpeg,image/png" >

注意限制是以字节为单位

在服务器端也要做响应的限制:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 $size = $myfile [ 'size' ]; //获取文件大小 $MaxSize =2097152; //设置最大允许字节 $type = $myfile [ 'type' ]; //获取图片类型 $AllowTypr = array ( 'image/jpeg' , 'image/png' , 'image/gif' ); //允许类型数组 if ( $error ==0){ //为0,代表上传成功    if ( $size > $MaxSize ){      echo "<script>alert('文件大小超过限制');</script>" ;      echo "<script>history.back(1);</script>" ;      exit ();    }    if (!in_array( $type , $AllowTypr )){      echo "<script>alert('请上传正确图片类型');</script>" ;      echo "<script>history.back(1);</script>" ;      exit ();    }

希望本文所述对大家PHP程序设计有所帮助。

原文链接:https://blog.csdn.net/theVicTory/article/details/66472614

可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

【腾讯云】云服务器产品特惠热卖中
搜索
标签列表
    关注我们

    了解等多精彩内容