使用php完成常见的文件上传功能(推荐)


Posted in PHP onJanuary 13, 2017

文件上传现在都是很常见的了,可以上传文件,上传头像等,不同的浏览器“文件上传”有不同的效果

先看下火狐浏览器的效果是这样的:

使用php完成常见的文件上传功能(推荐)

再看下IE浏览器是这样的:

使用php完成常见的文件上传功能(推荐)

还有很多其他的浏览器,就不一一的查看效果了,那么这个上传是怎么实现的呢?

一、文件上传功能

(1)第一是要有这个上传页面了

首先是要写表单元素了(其中就有处理页面“关于上传的处理了,其中有些规则可以写”,还有传输方式,再就是一个重要的属性,因为是文件上传,所以要有这个属性:enctype="multipart/form-data")再就是关于按钮了,表单决定之后,就是里面的内容,文件上传自然按钮的类型是“file”;然后就是“上传”按钮了,这个要用到提交,所以按钮类型要用“submit”的,代码如下:

<form action="wenjiansccl.php" method="post" enctype="multipart/form-data">  <!--处理页面起个名字,做文件上传是这个属性:enctype="multipart/form-data"-->
<input type="file" name="file"/> //浏览文件的按钮
<input type="submit" value="上传" /> //提交的上传按钮
</form>

先看下效果:

使用php完成常见的文件上传功能(推荐)

(2)第二就是重要的文件上传的处理页面了

我们可以先上传值输出下,看下文件上传之后会出现什么东西,注意的是:文件的传值方式,这里不能用post或是get了,要用$_FILES[""]这个传值方式

var_dump($_FILES["file"]);  //输出传过来的值

输出结果如图:

使用php完成常见的文件上传功能(推荐)

注意:因为下面会用到这张图中的信息,在这个我先起个名字(array),便于下面用到时讲述不清楚

不难看出数个二维数组:其中有文件的名称,类型,保存位置,错误信息和文件的大小,这样其实文件就会临时的保存在服务器上了

上传文件时有4项注意项:

1.控制上传文件的类型

2.控制上传文件的大小

3.防止文件名重复

3.1修改保存的文件名

  

3.11用户名+时间戳+随机数+文件名

   

3.12流水号

3.2使用文件夹

 

  3.21public/lch/2017-2-12/1.jpg

4.保存文件

知道了这四项注意项(也相当于步骤),那么就开始一步一步的写处理页面就可以了

(1)在输出时,可以看到不是有一项是“错误”项嘛,首先可以判断下是否传输有误

if($_FILES["file"]["error"]) //将文件传值到处理页面,找到出错的索引,也就是(array)图中的错误项error
{
  echo $_FILES["file"]["error"];
}

(2)上面是如果出错就输出出错信息,没有错就是进行下面的内容了:按照注意事项开始写吧

首先是:控制文件上传时的类型和大小(也是从(array)图中找到类型type和大小size,然后将它们赋想要的类型值就可以了)我们限定了jpeg和png这两种,也可是多种,用“或”写上就可以了。这里也用个if语句判断下(如果文件类型是jpeg或是png并且文件大小是小于1024000的就可以上传,否则就是上传失败)

if($_FILES["file"]["type"]=="image/jpeg" || $_FILES["file"]["type"]=="image/png" && $_FILES["file"]["size"]<1024000)
{<br>//注意事项3和4的内容<br>}
else
{
echo "文件类型不正确!"; 
}

(3)在代码中的注释(注意事项3和4的内容)处开始写文件的避免重复和保存

第一:找到文件的保存位置(想要保存在哪个位置),然后拼接上修改文件名的方式(使用时间戳方式)

$filesname = "./files/".date("YmdHis").$_FILES["file"]["name"]; //$_FILES["file"]["name"]这也同样的也是(array)图的名称name

第二:判断文件是否存在(存在就提示,不存在就保存到文件夹中)

if(file_exists($filesname)) //file_exists()方法:判断文件是否存在,里面的值就是定义的保存位置
{
echo "文件已经存在"; //存在给出提示
}
else
{
//不存在就,保存文件(move_uploaded_file()保存)
move_uploaded_file($_FILES["file"]["tmp_name"],$filesname);  //里面的值要有当前的保存位置,将要保存到哪的位置
}
<span style="font-family: 宋体; font-size: 15px"><span style="font-size: 18px">注意:</span><br>1.可能上传的时候是UTF-8的编码格式,Windows是用的国标的编码格式,上传上汉子可能成为乱码了,可以在文件保存位置下面加上“转换编码格式”<br>使用的是:</span><span style="font-size: 15px">iconv()方法:</span><span style="font-size: 15px">里面有3个值,一是现在使用的编码格式,二是想要转换的编码格式,三是想要转换的字符串</span>
$filename = iconv("UTF-8","gb2312",$filesname); //这个iconv()里面有3个值,一是现在使用的编码格式,二是想要转换的编码格式,三是想要转化的字符串
<span style="font-family: 宋体; font-size: 15px">2.如果上面的文件的上传格式是篡改的格式,也用move_uploaded_file()方法</span>

到此这个文件上传就结束了,可以试一下。

二,上传文件预览

上传图片时,都会先看效果怎么样,然后再上传的,接下来就是图片预览功能了

(1)可以先有个文件按钮,用于选择文件

<input id="uploadImage" type="file" name="photoimage" class="fimg1" onchange="PreviewImage();" /> //对这个按钮加一个事件

(2)用于显示的这个图片的一个div

<div id="uploadPreview"></div>

给这个div加点样式

#uploadPreview {
  width: 168px;
  height: 168px;             
  background-position: center center;
  background-size: cover;
  border: 4px solid #fff;
  -webkit-box-shadow: 0 0 0px 0px rgba(0, 0, 0, 0);
  display: inline-block;<br>}

看下效果:

使用php完成常见的文件上传功能(推荐)

然后就是写事件了

$("#uploadImage").on("change", function(){
  // 得到一个参考文件列表
  var files = !!this.files ? this.files : [];
  // 如果没有选择任何文件,或者没有文件读到就返回
  if (!files.length || !window.FileReader) return;
  // 只有进行选择的文件是一个形象
  if (/^image/.test( files[0].type)){
    // 创建一个新的FileReader的实例
    var reader = new FileReader();
    // 读取本地文件作为一个DataURL
    reader.readAsDataURL(files[0]);
    // 当加载时,图像数据设置为背景的div
    reader.onloadend = function(){
    $("#uploadPreview").css("background-image", "url("+this.result+")");
    }
  }
});

这只是一个简单的上传预览,上传到文件中的处理页面还没有写,改天补上完整的上传图片代码

看下选中图片的效果

使用php完成常见的文件上传功能(推荐)

这样,文件上传和图片预览就结束了,这两个结合一下就可以做出图片的上传了,过后我会继续补充完整的~~~

PHP 相关文章推荐
深入php var_dump()函数的详解
Jun 05 PHP
PHP CodeBase:将时间显示为&quot;刚刚&quot;&quot;n分钟/小时前&quot;的方法详解
Jun 06 PHP
php开启openssl的方法
May 15 PHP
php中的curl_multi系列函数使用例子
Jul 29 PHP
php网页病毒清除类
Dec 08 PHP
如何解决PHP无法实现多线程的问题
Sep 25 PHP
关于PHP中Session文件过多的问题及session文件保存位置
Mar 17 PHP
PHP读取文本文件并逐行输出该行使用最多的字符与对应次数的方法
Nov 25 PHP
ThinkPHP框架实现数据增删改
May 07 PHP
php脚本守护进程原理与实现方法详解
Jul 20 PHP
php实现基于pdo的事务处理方法示例
Jul 21 PHP
Ecshop 后台添加新功能栏目及管理权限设置教程
Nov 21 PHP
Yii2实现增删改查后留在当前页的方法详解
Jan 13 #PHP
PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析
Jan 12 #PHP
php中分页及SqlHelper类用法实例
Jan 12 #PHP
PHP生成图片验证码功能示例
Jan 12 #PHP
PHP中字符串长度的截取用法示例
Jan 12 #PHP
PHP实现二维数组去重功能示例
Jan 12 #PHP
PHP生成图片缩略图类示例
Jan 12 #PHP
You might like
用 Composer构建自己的 PHP 框架之基础准备
2014/10/30 PHP
在win系统安装配置 Memcached for PHP 5.3 图文教程
2015/03/03 PHP
PHP实现的超长文本分页显示功能示例
2018/06/04 PHP
用javascript实现无刷新更新数据的详细步骤 asp
2006/12/26 Javascript
javascript数组使用调用方法汇总
2007/12/08 Javascript
Mootools 1.2教程 输入过滤第二部分(字符串)
2009/09/15 Javascript
Extjs学习笔记之三 extjs form更多的表单项
2010/01/07 Javascript
javascript学习笔记(十四) window对象使用介绍
2012/06/20 Javascript
JavaScript模板入门介绍
2012/09/26 Javascript
js控制table合并具体实现
2014/02/20 Javascript
动态添加删除表格行的js实现代码
2014/02/28 Javascript
js动态修改整个页面样式达到换肤效果
2014/05/23 Javascript
js表单处理中单选、多选、选择框值的获取及表单的序列化
2016/03/08 Javascript
ES6中Iterator与for..of..遍历用法分析
2017/03/31 Javascript
详解webpack解惑:require的五种用法
2017/06/09 Javascript
jQuery实现倒计时功能 jQuery实现计时器功能
2017/09/19 jQuery
vue element-ui table表格滚动加载方法
2018/03/02 Javascript
vue解决花括号数据绑定不成功的问题
2019/10/30 Javascript
Python程序语言快速上手教程
2012/07/18 Python
使用IronPython把Python脚本集成到.NET程序中的教程
2015/03/31 Python
Python实现获取操作系统版本信息方法
2015/04/08 Python
python决策树之CART分类回归树详解
2017/12/20 Python
浅谈python中统计计数的几种方法和Counter详解
2019/11/07 Python
利用python画出AUC曲线的实例
2020/02/28 Python
基于django micro搭建网站实现加水印功能
2020/05/22 Python
Python程序慢的重要原因
2020/09/04 Python
Python图像读写方法对比
2020/11/16 Python
英国最大的在线时尚眼镜店:Eyewearbrands
2019/03/12 全球购物
迪卡侬中国官网:Decathlon中国
2020/08/10 全球购物
顶岗实习接收函
2014/01/09 职场文书
党员入党表决心的话
2014/03/11 职场文书
学生手册评语
2014/05/05 职场文书
英语教育专业自荐信
2014/05/29 职场文书
乡镇组织委员个人整改措施
2014/09/16 职场文书
工作失职检讨书(精华篇)
2014/10/15 职场文书
中学生社会实践教育活动总结
2015/05/06 职场文书