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的FTP学习(一)
Oct 09 PHP
PHP的FTP学习(二)
Oct 09 PHP
用PHP和ACCESS写聊天室(十)
Oct 09 PHP
php 获取本机外网/公网IP的代码
May 09 PHP
解析dedecms空间迁移步骤详解
May 15 PHP
PHP将Excel导入数据库及数据库数据导出至Excel的方法
Jun 24 PHP
php设置页面超时时间解决方法
Sep 22 PHP
YII Framework框架教程之使用YIIC快速创建YII应用详解
Mar 15 PHP
PHP页面跳转操作实例分析(header方法)
Sep 28 PHP
php数组指针操作详解
Feb 14 PHP
php记录搜索引擎爬行记录的实现代码
Mar 02 PHP
PHP实现的mysql读写分离操作示例
May 22 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字符比较函数similar_text、strnatcmp与strcasecmp用法分析
2014/11/18 PHP
PHP设计模式概论【概念、分类、原则等】
2020/05/01 PHP
prototype Element学习笔记(篇一)
2008/10/26 Javascript
JavaScript 应用技巧集合[推荐]
2009/08/30 Javascript
jQuery Flash/MP3/Video多媒体插件
2010/01/18 Javascript
JS验证身份证有效性示例
2013/10/11 Javascript
jquery上传插件fineuploader上传文件使用方法(jquery图片上传插件)
2013/12/05 Javascript
判断javascript的数据类型(示例代码)
2013/12/11 Javascript
IE6浏览器中window.location.href无效的解决方法
2014/11/20 Javascript
javascript实现倒计时N秒后网页自动跳转代码
2014/12/11 Javascript
Javascript中For In语句用法实例
2015/05/14 Javascript
jquery仅用6行代码实现滑动门效果
2015/09/07 Javascript
JavaScript控制浏览器全屏显示简单示例
2018/07/05 Javascript
微信{"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"}
2018/10/12 Javascript
微信小程序使用map组件实现路线规划功能示例
2019/01/22 Javascript
node.js中path路径模块的使用方法实例分析
2020/02/13 Javascript
jQuery带控制按钮轮播图插件
2020/07/31 jQuery
JavaScript的一些小技巧分享
2021/01/06 Javascript
[00:48]完美“圣”典2016风云人物:xiao8宣传片
2016/11/30 DOTA
python中使用百度音乐搜索的api下载指定歌曲的lrc歌词
2014/07/18 Python
Python字符串切片操作知识详解
2016/03/28 Python
Django自定义分页效果
2017/06/27 Python
Windows环境下python环境安装使用图文教程
2018/03/13 Python
Python while循环使用else语句代码实例
2020/02/07 Python
python统计函数库scipy.stats的用法解析
2020/02/25 Python
搭建pypi私有仓库实现过程详解
2020/11/25 Python
css3 position fixed固定居中问题解决方案
2014/08/19 HTML / CSS
美国知名的隐形眼镜电商:Contacts America
2019/11/19 全球购物
中科软笔试题和面试题
2014/10/07 面试题
医学生职业规划范文
2014/01/05 职场文书
2015年世界水日活动总结
2015/02/09 职场文书
毕业生对母校寄语
2015/02/26 职场文书
2015年司机年终工作总结
2015/05/14 职场文书
罗马假日观后感
2015/06/08 职场文书
导游词之河北白洋淀
2020/01/15 职场文书
Windows安装Anaconda3的方法及使用过程详解
2021/06/11 Python