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
dedecms采集中可以过滤多行代码的正则表达式
Mar 17 PHP
php GD绘制24小时柱状图
Jun 28 PHP
php 无极分类(递归)实现代码
Jan 05 PHP
php eval函数用法总结
Oct 31 PHP
解析PHP实现下载文件的两种方法
Jul 05 PHP
phpphp图片采集后按原路径保存图片示例
Feb 18 PHP
PHP中使用Imagick实现各种图片效果实例
Jan 21 PHP
PHP 二维数组和三维数组的过滤
Mar 16 PHP
PHP中__autoload和Smarty冲突的简单解决方法
Apr 08 PHP
CI框架整合widget(页面格局)的方法
May 17 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
Nov 14 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
PHPThumb PHP 图片缩略图库
2012/03/11 PHP
php_screw 1.5:php加密: 安装与使用详解
2013/06/20 PHP
js限制checkbox勾选的个数以及php获取多个checkbbox的方法深入解析
2013/07/18 PHP
php实现将数组转换为XML的方法
2015/03/09 PHP
php实现插入排序
2015/03/29 PHP
PHP常用算法和数据结构示例(必看篇)
2017/03/15 PHP
PHP chr()函数讲解
2019/02/11 PHP
通过PHP实现用户注册后邮箱验证激活
2020/11/10 PHP
JQuery的ready函数与JS的onload的区别详解
2013/11/21 Javascript
javascript异步编程的4种方法
2014/02/19 Javascript
Js操作树节点自动折叠展开的几种方法
2014/05/05 Javascript
Javascript实现鼠标右键特色菜单
2015/08/04 Javascript
深入浅析JavaScript中的constructor
2016/04/19 Javascript
总结十个Angular.js由浅入深的面试问题
2016/08/26 Javascript
基于javascript的异步编程实例详解
2017/04/10 Javascript
每周一练 之 数据结构与算法(Stack)
2019/04/16 Javascript
基于jquery实现的tab选项卡功能示例【附源码下载】
2019/06/10 jQuery
vue.config.js常用配置详解
2019/11/14 Javascript
[05:26]2014DOTA2西雅图国际邀请赛 iG战队巡礼
2014/07/07 DOTA
Python中最常用的操作列表的几种方法归纳
2015/04/24 Python
python爬虫获取多页天涯帖子
2018/02/23 Python
python实现简单遗传算法
2018/03/19 Python
深入浅析python 协程与go协程的区别
2019/05/09 Python
python 提取文件指定列的方法示例
2019/08/07 Python
Django框架下静态模板的继承操作示例
2019/11/08 Python
后端开发使用pycharm的技巧(推荐)
2020/03/27 Python
Python flask框架如何显示图像到web页面
2020/06/03 Python
tensorflow 大于某个值为1,小于为0的实例
2020/06/30 Python
Django中Aggregation聚合的基本使用方法
2020/07/09 Python
Python request中文乱码问题解决方案
2020/09/17 Python
Python引入多个模块及包的概念过程解析
2020/09/21 Python
打架检讨书100字
2014/01/19 职场文书
2015年光棍节活动总结
2015/03/24 职场文书
市级三好生竞选稿
2015/11/21 职场文书
2019个人半年工作总结
2019/06/21 职场文书
微信小程序实现轮播图指示器
2022/06/25 Javascript