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


Posted in PHP onDecember 20, 2019

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

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

1、php配置文件

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

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

2、前端表单

<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"。

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

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

3、后台处理

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

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

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

<?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属性进行判断处理:

$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、上传限制

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

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

注意限制是以字节为单位

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

$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程序设计有所帮助。

PHP 相关文章推荐
php Ajax乱码
Apr 09 PHP
PHP 反射机制实现动态代理的代码
Oct 22 PHP
php mssql 分页SQL语句优化 持续影响
Apr 26 PHP
windwos下使用php连接oracle数据库的过程分享
May 26 PHP
php微信浏览器分享设置以及回调详解
Aug 01 PHP
PHP简单遍历对象示例
Sep 28 PHP
php rmdir使用递归函数删除非空目录实例详解
Oct 20 PHP
浅谈php fopen下载远程文件的函数
Nov 18 PHP
AJAX的使用方法详解
Apr 29 PHP
Yii框架引入coreseek分页功能示例
Feb 08 PHP
Smarty模板配置实例简析
Jul 20 PHP
php 中的信号处理操作实例详解
Mar 04 PHP
PHP使用PDO实现mysql防注入功能详解
Dec 20 #PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
Dec 20 #PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
Dec 20 #PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
Dec 20 #PHP
Laravel框架处理用户的请求操作详解
Dec 20 #PHP
PHP上传图片到数据库并显示的实例代码
Dec 20 #PHP
ThinkPHP类似AOP思想的参数验证的实现方法
Dec 18 #PHP
You might like
PHP根据session与cookie用户登录状态操作类的代码
2016/05/13 PHP
thinkPHP数据库增删改查操作方法实例详解
2016/12/06 PHP
PHP编程快速实现数组去重的方法详解
2017/07/22 PHP
PHP读取CSV大文件导入数据库的实例
2017/07/24 PHP
js 解决“options为空或不是对象”
2008/12/22 Javascript
自己的js工具 Event封装
2009/08/21 Javascript
javascript 嵌套的函数(作用域链)
2010/03/15 Javascript
JQuery简单实现锚点链接的平滑滚动
2015/05/03 Javascript
JS中Eval解析JSON字符串的一个小问题
2016/02/21 Javascript
JS调用Android、Ios原生控件
2017/01/06 Javascript
jQuery实现文字自动横移
2017/01/08 Javascript
微信小程序 devtool隐藏的秘密
2017/01/21 Javascript
JavaScript面向对象精要(下部)
2017/09/12 Javascript
layui table设置前台过滤转义等方法
2018/08/17 Javascript
vue仿element实现分页器效果
2018/09/13 Javascript
微信小程序仿知乎实现评论留言功能
2018/11/28 Javascript
利用d3.js力导布局绘制资源拓扑图实例教程
2019/01/08 Javascript
layer.open组件获取弹出层页面变量、函数的实例
2019/09/25 Javascript
vue-router的钩子函数用法实例分析
2019/10/26 Javascript
解决vue加scoped后就无法修改vant的UI组件的样式问题
2020/09/07 Javascript
浏览器JavaScript调试功能无法使用解决方案
2020/09/18 Javascript
python抓取网页时字符集转换问题处理方案分享
2014/06/19 Python
python sys,os,time模块的使用(包括时间格式的各种转换)
2018/04/27 Python
python实现梯度下降算法
2020/03/24 Python
详解opencv Python特征检测及K-最近邻匹配
2019/01/21 Python
python实现超市商品销售管理系统
2019/10/25 Python
Flask框架搭建虚拟环境的步骤分析
2019/12/21 Python
Python通过zookeeper实现分布式服务代码解析
2020/07/22 Python
详解CSS3原生支持div铺满浏览器的方法
2018/08/30 HTML / CSS
韩国乐天网上商城:Lotte iMall
2021/02/03 全球购物
创建绿色学校先进个人材料
2014/08/20 职场文书
六一儿童节新闻稿
2015/07/17 职场文书
单位车辆管理制度
2015/08/05 职场文书
2016年寒假见闻
2015/10/10 职场文书
2016年暑期社会实践活动总结报告
2016/04/06 职场文书
python b站视频下载的五种版本
2021/05/27 Python