使用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 相关文章推荐
Wordpress php 分页代码
Oct 21 PHP
PHP简洁函数(PHP简单明了函数语法)
Jun 10 PHP
PHP取余函数介绍MOD(x,y)与x%y
May 15 PHP
PHP动态输出JavaScript代码实例
Feb 12 PHP
php获取本周星期一具体日期的方法
Apr 20 PHP
php使用socket post数据到其它web服务器的方法
Jun 02 PHP
10个超级有用的PHP代码片段果断收藏
Sep 23 PHP
非常有用的9个PHP代码片段
Apr 06 PHP
CI框架源码解读之URI.php中_fetch_uri_string()函数用法分析
May 18 PHP
PHP中in_array函数使用的问题与解决办法
Sep 11 PHP
详解Yii2高级版引入bootstrap.js的一个办法
Mar 21 PHP
php微信开发之谷歌测距
Jun 14 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
新52大事件
2020/03/03 欧美动漫
php 代码优化的42条建议 推荐
2009/09/25 PHP
php中FTP函数ftp_connect、ftp_login与ftp_chmod用法
2014/11/18 PHP
微信公众号模板消息群发php代码示例
2016/12/29 PHP
ThinkPHP5+Layui实现图片上传加预览功能
2018/08/17 PHP
php防止表单重复提交实例讲解
2019/02/11 PHP
Prototype使用指南之range.js
2007/01/10 Javascript
js 时间格式与时间戳的相互转换示例代码
2013/12/25 Javascript
JavaScript中实现sprintf、printf函数
2015/01/27 Javascript
javascript实现列表滚动的方法
2015/07/30 Javascript
Javascript实现可旋转的圆圈实例代码
2015/08/04 Javascript
Angular 4依赖注入学习教程之ValueProvider的使用(七)
2017/06/04 Javascript
js移动端事件基础及常用事件库详解
2017/08/15 Javascript
解决layui调用自定义方法提示未定义的问题
2019/09/14 Javascript
[01:03]悬念揭晓 11月26日DOTA2完美盛典不见不散
2017/11/23 DOTA
[51:27]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
[01:01:52]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第二场 1月9日
2021/03/11 DOTA
使用Python下的XSLT API进行web开发的简单教程
2015/04/15 Python
Python基于pygame实现的font游戏字体(附源码)
2015/11/11 Python
Python中数组,列表:冒号的灵活用法介绍(np数组,列表倒序)
2018/04/18 Python
python小程序基于Jupyter实现天气查询的方法
2020/03/27 Python
pycharm导入源码的具体步骤
2020/08/04 Python
一款利用css3的鼠标经过动画显示详情特效的实例教程
2014/12/29 HTML / CSS
Sandro法国官网:法国成衣品牌
2019/08/28 全球购物
美国宠物护理专家:Revival Animal Health
2020/01/05 全球购物
应届大学生自荐信格式
2013/09/21 职场文书
会计电算化应届生求职信
2013/11/03 职场文书
企业给企业的表扬信
2014/01/13 职场文书
护理专业毕业生自我鉴定总结
2014/03/24 职场文书
关于读书的演讲稿600字
2014/08/27 职场文书
不服从公司安排检讨书
2014/09/24 职场文书
房屋维修协议书范本
2014/09/25 职场文书
劳模先进事迹材料
2014/12/24 职场文书
工伤事故赔偿协议书
2015/08/06 职场文书
军训后的感想
2015/08/07 职场文书
HTML CSS 一个标签实现带动画的抖音LOGO
2022/04/26 HTML / CSS