PHP实现文件上传操作和封装


Posted in PHP onMarch 04, 2020

本文实例为大家分享了PHP实现文件上传操作和封装的具体代码,供大家参考,具体内容如下

PHP文件上传主要两个步骤:

1.首先前端html写好文件表单上传网页

2.在前端点提交时,web服务器php脚本通过超全局变量$_FILES和一个move_uploaded_file函数搞定

前端html如下:

<!DOCTYPE HTML>
<html>
<head>
 <meta charset="utf-8">
 <title>文件上传</title>
</head>
<body>
 <form action="upload.php" method="post" enctype="multipart/form-data">
 <div style="margin: 0 auto; padding:50px 0px; width:300px;">
 <input type="file" id="upload" name="uploadpic" style="display:none"/>
 <input type="text" id="filename" value="文件名">
 <input type="button" id="picbtn" value="图片上传" />
 <input type="submit" value="提交" /> 
 
 </div>
 </form>
 <script type="text/javascript">
 function $(id)
 {
 var objs = document.getElementById(id);
 return objs;
 }
 window.onload = function(){
 $("picbtn").onclick = function(){
 $("upload").click(); //点图片上传时,同时触发文件选择
 }
 
 $("upload").onchange = function(){
 $("filename").value = this.value; //获取文件选择值
 }
 
 } 
 </script>
</body>
</html>

注:表单上传文件时,method必须用post,且须声明是enctype="multipart/form-data"

2.服务器php脚本upload.php代码如下:

<?php
if(move_uploaded_file($_FILES['uploadpic']['tmp_name'], './fileupload/'.$_FILES['uploadpic']['name']))
{
 echo "ok";
 
}
else 
{
 echo "fail";
}

注:可以用print_r($_FILES)打印查看超全局变量里面放的内容,可以看到文件的相关信息都放在这个变量里面;如

array (
 'uploadpic' => 
 array (
 'name' => '1客栈首页.jpg',
 'type' => 'image/jpeg',
 'tmp_name' => 'C:\\Windows\\Temp\\php3F1C.tmp',
 'error' => 0,
 'size' => 1706919,
 ),
)ok

从变量的数组里面可以知道上传的文件名,文件类型、web服务器临时存放图片的位置(如果要更改临时存放路径,可以去php.ini里面更改),错误信息和文件大小(限制文件上传大小,也可以到php.ini里修改)。

error有如下几种:

其值为 0,没有错误发生,文件上传成功。 
其值为 1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。 
其值为 2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。 
其值为 3,文件只有部分被上传。 
其值为 4,没有文件被上传。
其值为 6,找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进。 
其值为 7,文件写入失败。PHP 5.1.0 引进。

=====文件上传封装类======

<?php
class UpFile{
 public $maxsize=2; //1M
 public $errmsg="";
 public $ext = "png,jpg,bmp,gif";
 
 //上传大小是否符合
 function isAllowSize($size)
 {
 if($size <= $this->maxsize*1024*1024)
 {
 return true;
 }
 else 
 {
 return false;
 }
 }
 
 //判断后缀名是否符合
 function isAllowExt($ext)
 {
 return in_array(strtolower($ext), explode(',', $this->ext));
 }
 
 //获取文件后缀名
 function getFileExt($file)
 {
 $arr = explode('.', $file);
 return end($arr);
 }
 
 //图片上传,$pickey为input的name值,$save_path保存路径
 function upload($pickey,$save_path)
 {
 if(!isset($_FILES[$pickey]))
 {
 return false;
 }
 
 if($_FILES[$pickey]['error'] !=0)
 {
 $this->errmsg = $this->getErrorType($_FILES[$pickey]['error']);
 return false;
 }
 $file_ext = $this->getFileExt($_FILES[$pickey]['name']);
 echo $file_ext;
 if(!$this->isAllowExt($file_ext))
 {
 $this->errmsg = "文件后缀名不符合";
 return false;
 }
 echo $_FILES[$pickey]['size'];
 if(!$this->isAllowSize($_FILES[$pickey]['size']))
 {
 $this->errmsg = "大小超过限制";
 return false;
 }
 
 $str = "abcdefjhijkmnpqrst23456789";
 $filename = date("YmdHis",time()).substr(str_shuffle($str), 0,6);
 $dir = $this->makeDir($save_path);
 if(move_uploaded_file($_FILES[$pickey]['tmp_name'], $dir.'/'.$filename.'.'.$file_ext))
 {
 
 return true;
 }
 else 
 {
 $this->errmsg = "上传失败";
 return false;
 }
 }
 
 //创建目录
 function makeDir($save_path)
 {
 $path = $save_path.'/'.date("Ymd",time());
 
 if(is_dir($path) || mkdir($path,0777,true)) //不存在该目录文件,创建
 {
 echo $path;
 return $path;
 }
 else 
 {
 return false;
 }
 }
 
 //错误类型分析
 function getErrorType($error)
 {
 $errmsg = "";
 switch ($error)
 {
 case 0:
 $errmsg = "文件上传成功";
 break;
 case 1:
 $errmsg = "上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值";
 break;
 case 2:
 $errmsg = "上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值";
 break;
 case 3:
 $errmsg = "文件只有部分被上传";
 break;
 case 4:
 $errmsg = "没有文件被上传";
 break;
 case 6:
 $errmsg = "找不到临时文件夹";
 break;
 case 7:
 $errmsg = "文件写入失败";
 break;
 }
 return $errmsg;
 }
}

使用如下:

<?php
include 'upfile.class.php';
 
$upfile = new UpFile();
if($upfile->upload('uploadpic', "./fileupload"))
{
 echo "ok";
}
else
{
 echo $upfile->errmsg;
}

本文已被整理到了《php文件上传操作汇总》 ,更多精彩内容,欢迎大家学习阅读。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php出现Cannot modify header information问题的解决方法大全
Apr 09 PHP
php 静态页面中显示动态内容
Aug 14 PHP
PHP采集利器 Snoopy 试用心得
Jul 03 PHP
解析php二分法查找数组是否包含某一元素
May 23 PHP
探讨各种PHP字符串函数的总结分析
Jun 05 PHP
PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法
Aug 28 PHP
php实现的简易扫雷游戏实例
Jul 09 PHP
iOS自定义提示弹出框实现类似UIAlertView的效果
Nov 16 PHP
php curl常用的5个经典例子
Jan 20 PHP
PHP巧妙利用位运算实现网站权限管理的方法
Mar 12 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
Oct 14 PHP
PHP框架实现WebSocket在线聊天通讯系统
Nov 21 PHP
PHP实现文件上传后台处理脚本
Mar 04 #PHP
php 使用html5 XHR2实现上传文件与进度显示功能示例
Mar 03 #PHP
php+ajax实现文件切割上传功能示例
Mar 03 #PHP
php 输出缓冲 Output Control用法实例详解
Mar 03 #PHP
PHP 加密 Password Hashing API基础知识点
Mar 02 #PHP
thinkphp5 + ajax 使用formdata提交数据(包括文件上传) 后台返回json完整实例
Mar 02 #PHP
php加速缓存器opcache,apc,xcache,eAccelerator原理与配置方法实例分析
Mar 02 #PHP
You might like
DOTA2【瓜皮时刻】Vol.91 RTZ山史最惨“矿难”
2021/03/05 DOTA
如何用PHP做到页面注册审核
2017/03/02 PHP
详解PHP多个进程配合redis的有序集合实现大文件去重
2019/03/06 PHP
PHP实现八皇后算法
2019/05/06 PHP
提高代码性能技巧谈—以创建千行表格为例
2006/07/01 Javascript
js parseInt(&quot;08&quot;)未指定进位制问题
2010/06/19 Javascript
关于JavaScript中var声明变量作用域的推断
2010/12/16 Javascript
基于javascipt-dom编程 table对象的使用
2013/04/22 Javascript
jQuery中:contains选择器用法实例
2014/12/30 Javascript
用队列模拟jquery的动画算法实例
2015/01/20 Javascript
七个不允许错过的jQuery小技巧
2015/12/21 Javascript
Javascript中作用域的详细介绍
2016/10/06 Javascript
jQuery使用ajax方法解析返回的json数据功能示例
2017/01/10 Javascript
TypeScript入门-基本数据类型
2017/03/28 Javascript
使用javascript做时间倒数读秒功能的实例
2019/01/23 Javascript
浅入深出Vue之组件使用
2019/07/11 Javascript
vue中使用vue-pdf的方法详解
2020/09/05 Javascript
如何在VUE中使用vue-awesome-swiper
2021/01/04 Vue.js
Python爬虫动态ip代理防止被封的方法
2019/07/07 Python
Python循环结构的应用场景详解
2019/07/11 Python
python中matplotlib实现随鼠标滑动自动标注代码
2020/04/23 Python
Django通过json格式收集主机信息
2020/05/29 Python
Python lambda表达式原理及用法解析
2020/08/18 Python
基于python实现简单C/S模式代码实例
2020/09/14 Python
HTML5 Canvas 起步(1) - 基本概念
2009/05/12 HTML / CSS
HTML5 新事件 小结
2009/07/16 HTML / CSS
JD Sports西班牙:英国领先的运动服装公司
2020/01/06 全球购物
以下为Windows NT 下的32 位C++程序,请计算sizeof 的值
2016/12/07 面试题
日语专业个人求职信范文
2014/02/02 职场文书
十佳护士获奖感言
2014/02/18 职场文书
承诺书模板
2014/08/30 职场文书
通知函的格式
2015/04/27 职场文书
中学社团活动总结
2015/05/07 职场文书
幼儿园小班教育随笔
2015/08/14 职场文书
Python 文本滚动播放器的实现代码
2021/04/25 Python
JavaScript最完整的深浅拷贝实现方式详解
2022/02/28 Javascript