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 相关文章推荐
把从SQL中取出的数据转化成XMl格式
Oct 09 PHP
用PHP编写和读取XML的几种方式
Jan 12 PHP
关于PHP堆栈与列队的学习
Jun 21 PHP
浅析php中常量,变量的作用域和生存周期
Aug 10 PHP
PHP生成Gif图片验证码
Oct 27 PHP
PHP生成图片验证码、点击切换实例
Jun 25 PHP
Laravel框架路由配置总结、设置技巧大全
Sep 03 PHP
yii通过小物件生成view的方法
Oct 08 PHP
Yii2实现log输出到file及database的方法
Nov 12 PHP
PHP批量获取网页中所有固定种子链接的方法
Nov 18 PHP
PHP框架Laravel中实现supervisor执行异步进程的方法
Jun 07 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
Mar 26 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
linux下为php添加curl扩展的方法
2011/07/29 PHP
php生成EAN_13标准条形码实例
2013/11/13 PHP
thinkphp普通查询与表达式查询实例分析
2014/11/24 PHP
php基于Snoopy解析网页html的方法
2015/07/09 PHP
PHP快速排序quicksort实例详解
2016/09/28 PHP
使用composer安装使用thinkphp6.0框架问题【视频教程】
2019/10/01 PHP
判断客户端浏览器是否安装了Flash插件的多种方法
2010/08/11 Javascript
JS模拟实现Select效果代码
2015/09/24 Javascript
jQuery插件passwordStrength密码强度指标详解
2016/06/24 Javascript
JSON格式的时间/Date(2367828670431)/格式转为正常的年-月-日 格式的代码
2016/07/27 Javascript
jQuery实现的表头固定效果实例【附完整demo源码下载】
2016/08/01 Javascript
使用jquery给新生的th绑定hover事件的实例
2017/02/10 Javascript
微信公众平台获取access_token的方法步骤
2019/03/29 Javascript
arctext.js实现文字平滑弯曲弧形效果的插件
2019/05/13 Javascript
ionic4+angular7+cordova上传图片功能的实例代码
2019/06/19 Javascript
微信小程序文字显示换行问题
2019/07/28 Javascript
layui字体图标 loading图标静止不旋转的解决方法
2019/09/23 Javascript
vue移动端使用canvas签名的实现
2020/01/15 Javascript
400多行Python代码实现了一个FTP服务器
2012/05/10 Python
对python的文件内注释 help注释方法
2018/05/23 Python
python求最大连续子数组的和
2018/07/07 Python
在Python中pandas.DataFrame重置索引名称的实例
2018/11/06 Python
Django-xadmin+rule对象级权限的实现方式
2020/03/30 Python
CSS3区域模块region相关编写示例
2015/08/28 HTML / CSS
英国领先的运动物理治疗供应公司:Vivomed
2018/07/14 全球购物
ellesse美国官方商店:意大利高级运动服品牌
2019/10/29 全球购物
沃尔玛旗下墨西哥超市:Bodega Aurrera
2020/11/13 全球购物
见习期自我鉴定
2013/11/07 职场文书
上班玩手机检讨书
2014/02/17 职场文书
乡镇安全生产目标责任书
2014/07/23 职场文书
2014幼儿园家长工作总结
2014/11/10 职场文书
2014年法院个人工作总结
2014/12/17 职场文书
2015年库房工作总结
2015/04/30 职场文书
致接力运动员加油稿
2015/07/21 职场文书
2015年乡镇组织委员工作总结
2015/10/23 职场文书
将Python代码打包成.exe可执行文件的完整步骤
2021/05/12 Python