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配置文件中最常用四个ini函数
Mar 19 PHP
PHP MemCached 高级缓存应用代码
Aug 05 PHP
PHP调用MsSQL Server 2012存储过程获取多结果集(包含output参数)的详解
Jul 03 PHP
php使用多个进程同时控制文件读写示例
Feb 28 PHP
PHP OPP机制和模式简介(抽象类、接口和契约式编程)
Jun 09 PHP
PHP字符串word末字符实现大小写互换的方法
Nov 10 PHP
PHP判断IP并转跳到相应城市分站的方法
Mar 25 PHP
微信利用PHP创建自定义菜单的方法
Aug 01 PHP
利用PHP将图片转换成base64编码的实现方法
Sep 13 PHP
利用Homestead快速运行一个Laravel项目的方法详解
Nov 14 PHP
PHP基于redis计数器类定义与用法示例
Feb 08 PHP
详解Laravel制作API接口
May 31 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 执行系统外部命令 system() exec() passthru()
2009/08/11 PHP
php使用mb_check_encoding检查字符串在指定的编码里是否有效
2013/11/07 PHP
Smarty中常用变量操作符汇总
2014/10/27 PHP
php实现二进制和文本相互转换的方法
2015/04/18 PHP
php命令行(cli)下执行PHP脚本文件的相对路径的问题解决方法
2015/05/25 PHP
PHP符合PSR编程规范的实例分享
2016/12/21 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
2017/12/26 PHP
Swoole扩展的6种模式深入详解
2021/03/04 PHP
JavaScript 组件之旅(四):测试 JavaScript 组件
2009/10/28 Javascript
一个级联菜单代码学习及removeClass与addClass的应用
2013/01/24 Javascript
Javascript表格翻页效果的具体实现
2013/10/05 Javascript
JavaScript将数据转换成整数的方法
2014/01/04 Javascript
抛弃Nginx使用nodejs做反向代理服务器
2014/07/17 NodeJs
用js传递value默认值的示例代码
2014/09/11 Javascript
Bootstrap基本插件学习笔记之轮播幻灯片(23)
2016/12/08 Javascript
JS图片轮播与索引变色功能实例详解
2017/07/06 Javascript
extract-text-webpack-plugin用法详解
2019/02/14 Javascript
详解ES6 Promise的生命周期和创建
2019/08/18 Javascript
[02:52]DOTA2新手基础教程 米波
2014/01/21 DOTA
[01:11:10]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG加赛
2014/05/26 DOTA
从零学Python之引用和类属性的初步理解
2014/05/15 Python
python对url格式解析的方法
2015/05/13 Python
Python3 jupyter notebook 服务器搭建过程
2018/11/30 Python
Python3日期与时间戳转换的几种方法详解
2019/06/04 Python
对YOLOv3模型调用时候的python接口详解
2019/08/26 Python
Python3之字节串bytes与字节数组bytearray的使用详解
2019/08/27 Python
python打包成so文件过程解析
2019/09/28 Python
django实现HttpResponse返回json数据为中文
2020/03/27 Python
MCAKE蛋糕官方网站:一直都是巴黎的味道
2018/02/06 全球购物
幼儿园教师岗位职责
2014/03/17 职场文书
函授毕业生自我鉴定范文
2014/03/25 职场文书
在校实习生求职信
2014/06/18 职场文书
婚内房产协议书范本
2014/10/02 职场文书
2015年社区服务活动总结
2015/03/25 职场文书
中秋节祝酒词
2015/08/12 职场文书
《游戏公平》教学反思
2016/02/20 职场文书