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安装问题
Oct 09 PHP
php5数字型字符串加解密代码
Apr 24 PHP
简单的php写入数据库类代码分享
Jul 26 PHP
PHP中的Memcache详解
Apr 05 PHP
PHP实现的XML操作类【XML Library】
Dec 29 PHP
php file_get_contents取文件中数组元素的方法
Apr 01 PHP
PHP调用其他文件中的类
Apr 02 PHP
PHP中实现中文字串截取无乱码的解决方法
May 29 PHP
php命令行写shell实例详解
Jul 19 PHP
Laravel5.4框架使用socialite实现github登录的方法
Mar 20 PHP
php ZipArchive实现多文件打包下载实例
Oct 31 PHP
php pdo连接数据库操作示例
Nov 18 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
PHP getallheaders无法获取自定义头(headers)的问题
2016/03/23 PHP
PHP实现Google plus的好友拖拽分组效果
2016/10/21 PHP
php 截取utf-8格式的字符串实例代码
2016/10/30 PHP
PHP扩展安装方法步骤解析
2020/11/24 PHP
js wmp操作代码小结(音乐连播功能)
2008/11/08 Javascript
jquery 获取json数据实现代码
2009/04/27 Javascript
使用JQuery和s3captche实现一个水果名字的验证
2009/08/14 Javascript
JavaScript代码性能优化总结篇
2016/05/15 Javascript
jQuery Easyui datagrid行内实现【添加】、【编辑】、【上移】、【下移】
2016/12/19 Javascript
详解vue项目优化之按需加载组件-使用webpack require.ensure
2017/06/13 Javascript
vue 实现在函数中触发路由跳转的示例
2018/09/01 Javascript
跨域请求两种方法 jsonp和cors的实现
2018/11/11 Javascript
jQuery 筛选器简单操作示例
2019/10/02 jQuery
微信小程序上传图片并等比列压缩到指定大小的实例代码
2019/10/24 Javascript
Echarts实现单条折线可拖拽效果
2019/12/19 Javascript
详解vue中v-bind:style效果的自定义指令
2020/01/21 Javascript
VSCode搭建React Native环境
2020/05/07 Javascript
vue实现列表滚动的过渡动画
2020/06/29 Javascript
vue element-ul实现展开和收起功能的实例代码
2020/11/25 Vue.js
[01:06]DOTA2小知识课堂 Ep.02 吹风竟可解梦境缠绕
2019/12/05 DOTA
Python更新数据库脚本两种方法及对比介绍
2017/07/27 Python
Python排序搜索基本算法之冒泡排序实例分析
2017/12/09 Python
使用python读取csv文件快速插入数据库的实例
2018/06/21 Python
Django配置celery(非djcelery)执行异步任务和定时任务
2018/07/16 Python
python实现简单的单变量线性回归方法
2018/11/08 Python
Pycharm 文件更改目录后,执行路径未更新的解决方法
2019/07/19 Python
在Python中使用MongoEngine操作数据库教程实例
2019/12/03 Python
Python OpenCV去除字母后面的杂线操作
2020/07/05 Python
Python爬虫如何破解JS加密的Cookie
2020/11/19 Python
Python列表元素删除和remove()方法详解
2021/01/04 Python
CSS3实现水平居中、垂直居中、水平垂直居中的实例代码
2020/02/27 HTML / CSS
HTML5的一个显示电池状态的API简介
2015/06/18 HTML / CSS
2015年售票员工作总结
2015/04/29 职场文书
人与自然的观后感
2015/06/18 职场文书
秋季运动会加油词
2015/07/18 职场文书
Netty分布式客户端接入流程初始化源码分析
2022/03/25 Java/Android