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中查询SQL Server或Sybase时TEXT字段被截断的解决方法
Mar 10 PHP
php session 检测和注销
Mar 16 PHP
开启CURL扩展,让服务器支持PHP curl函数(远程采集)
Mar 19 PHP
PHP的cURL库功能简介 抓取网页、POST数据及其他
Apr 07 PHP
php采集文章中的图片获取替换到本地(实现代码)
Jul 08 PHP
PHP图片裁剪函数(保持图像不变形)
May 04 PHP
php socket客户端及服务器端应用实例
Jul 04 PHP
PHP之浮点数计算比较以及取整数不准确的解决办法
Jul 29 PHP
简单解析PHP程序的运行流程
Jun 23 PHP
php脚本守护进程原理与实现方法详解
Jul 20 PHP
laravel获取不到session的三种解决办法【推荐】
Sep 16 PHP
启用OPCache提高PHP程序性能的方法
Mar 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
PHP自带函数给数字或字符串自动补齐位数
2014/07/29 PHP
跟我学Laravel之请求(Request)的生命周期
2014/10/15 PHP
使用PHPExcel操作Excel用法实例分析
2015/03/26 PHP
PHP实现的曲线统计图表示例
2016/11/10 PHP
Yii2使用$this-&gt;context获取当前的Module、Controller(控制器)、Action等
2017/03/29 PHP
safari下载文件自动加了html后缀问题
2018/11/09 PHP
js取消单选按钮选中示例代码
2013/11/14 Javascript
js的flv视频播放器插件使用方法
2015/06/23 Javascript
Javascript 动态改变imput type属性
2016/11/01 Javascript
通过扫描二维码打开app的实现代码
2016/11/10 Javascript
使用JavaScript实现一个小程序之99乘法表
2017/09/21 Javascript
jquery select插件异步实时搜索实例代码
2017/10/20 jQuery
微信小程序实现人脸识别登陆的示例代码
2019/04/02 Javascript
对python中的argv和argc使用详解
2018/12/15 Python
Python3.5实现的三级菜单功能示例
2019/03/25 Python
python 遗传算法求函数极值的实现代码
2020/02/11 Python
Python虚拟环境的创建和使用详解
2020/09/07 Python
Python爬虫中Selenium实现文件上传
2020/12/04 Python
HTML5 本地存储之如果没有数据库究竟会怎样
2013/04/25 HTML / CSS
让ie浏览器成为支持html5的浏览器的解决方法(使用html5shiv)
2014/04/08 HTML / CSS
巴西图书和电子产品购物网站:Saraiva
2017/06/07 全球购物
马来西亚银饰品牌:JEOEL
2017/12/15 全球购物
玉兰油美国官网:OLAY美国
2018/10/25 全球购物
德国便宜的宠物店:Brekz.de
2020/10/23 全球购物
上海中网科技笔试题
2012/02/19 面试题
机械专业毕业生推荐信范文
2013/11/25 职场文书
会展策划与管理专业大学生职业生涯规划
2014/02/07 职场文书
大三学生学年自我鉴定
2014/09/12 职场文书
开展党的群众路线教育实践活动情况汇报
2014/11/05 职场文书
2014年妇女工作总结
2014/12/06 职场文书
2014年留守儿童工作总结
2014/12/10 职场文书
2015新生加入学生会自荐书
2015/03/24 职场文书
死亡诗社观后感
2015/06/05 职场文书
2015年美容师个人工作总结
2015/10/14 职场文书
事业单位工作人员2015年度思想工作总结
2015/10/15 职场文书
干部作风纪律整顿心得体会
2016/01/23 职场文书