功能强大的php文件上传类


Posted in PHP onAugust 29, 2016

本文实例为大家分享了php文件上传类,功能很强大,供大家参考,具体内容如下

<?PHP
/*
*文件上传类
**/
class upfile{
private $file_size;//上传源文件大小
private $file_tem;//上传文件临时储存名
private $file_name;//上传文件名
private $file_type;//上传文件类型
private $file_max_size=2000000;//允许文件上传最大
private $file_folder="uploadFiles";//文件上传路径
private $over_write=false;//是否覆盖同名文件
//允许上传图片的类型
private $allow_type=array('image/jpg','image/jpeg','image/png','image/pjpeg','image/gif','image/bmp','image/x-png');


//构造类,file:上传文件域
function __construct($file){
$this->file_name=$_FILES[$file]['name'];//客户端原文件名
$this->file_type=$_FILES[$file]['type'];//文件类型
$this->file_tem=$_FILES[$file]['tmp_name'];//储存的临时文件名,一般是系统默认
$this->file_size=$_FILES[$file]['size'];//文件大小
}

//如果文件夹不存在则创建文件夹 
function creatFolder($f_path){
if(!file_exists($f_path)){
mkdir($f_path,0777);
}
}

//判断文件是不是超过上传限制
function is_big(){
if($this->file_size>$this->file_max_size){
echo "文件太大,超过限制!";
exit;
}
}

//检查文件类型
function check_type(){
if(!in_array($this->file_type,$this->allow_type)){
echo "上传文件类型不正确";
exit;
}
}

//检查文件是否存在
function check_file_name(){
if(!file_exists($this->file_tem)){
echo "上传文件不存在";
exit;
}          
}

//检查是否有同名文件,是否覆盖
function check_same_file($filename){
if(file_exists($filename)&&$this->over_write!=true){
echo "同名文件已存在!";
exit;
}    
}

//移动文件
function move_file($filename,$destination){
if(!move_uploaded_file($filename,$destination)){
echo "移动文件出错";
exit;
}
}

//检查文件是否是通过 HTTP POST 上传的
function is_upload_file(){
if(!is_uploaded_file($this->file_tem)){
echo "文件不存在";
exit;
}
}

//获得文件后缀名
function getext(){
$ext=$this->file_name;
$extstr=explode('.',$ext);
$count=count($extstr)-1;
return $extstr[$count];
}

//新建文件名
function set_name(){      
return time().".".$this->getext();
}

//建立以年月日为文件夹名
function creat_mulu(){
$this->creatFolder("../../upload/".date(Ymd));  
return "upload/".date(Ymd);
}

//生成的文件名
function files_name(){
$name=$this->set_name();
$folder=$this->creat_mulu();
return "../../".$folder."/".$name;
}

//上传文件
function upload_file(){
$f_name=$this->files_name();
move_uploaded_file($this->file_tem,$f_name);
return $f_name;
}  

//生成缩略图
//最大宽:120,高:120
function create_simg($img_w,$img_h){
$name=$this->set_name();
$folder=$this->creat_mulu();
$new_name="../../".$folder."/s_".$name;      
$imgsize=getimagesize($this->files_name());

switch ($imgsize[2]){
case 1:
if(!function_exists("imagecreatefromgif")){
echo "你的GD库不能使用GIF格式的图片,请使用Jpeg或PNG格式!返回";
exit();
}
$im = imagecreatefromgif($this->files_name());
break;
case 2:
if(!function_exists("imagecreatefromjpeg")){
echo "你的GD库不能使用jpeg格式的图片,请使用其它格式的图片!返回";
exit();
}
$im = imagecreatefromjpeg($this->files_name());
break;
case 3:
$im = imagecreatefrompng($this->files_name());
break;
case 4:
$im = imagecreatefromwbmp($this->files_name());
break;
default:
die("is not filetype right");
exit;
}

$src_w=imagesx($im);//获得图像宽度
$src_h=imagesy($im);//获得图像高度
$new_wh=($img_w/$img_h);//新图像宽与高的比值
$src_wh=($src_w/$src_h);//原图像宽与高的比值
if($new_wh<=$src_wh){
$f_w=$img_w;
$f_h=$f_w*($src_h/$src_w);
}else{
$f_h=$img_h;
$f_w=$f_h*($src_w/$src_h);
}
if($src_w>$img_w||$src_h>$img_h){      
if(function_exists("imagecreatetruecolor")){//检查函数是否已定义
$new_img=imagecreatetruecolor($f_w,$f_h);
if($new_img){
imagecopyresampled($new_img,$im,0,0,0,0,$f_w,$f_h,$src_w,$src_h);//重采样拷贝部分图像并调整大小
}else{
$new_img=imagecreate($f_w,$f_h);
imagecopyresized($new_img,$im,0,0,0,0,$f_w,$f_h,$src_w,$src_h);
}
}else{
$$new_img=imagecreate($f_w,$f_h);
imagecopyresized($new_img,$im,0,0,0,0,$f_w,$f_h,$src_w,$src_h);
}
if(function_exists('imagejpeg')){
imagejpeg($new_img,$new_name);
}else{
imagepng($new_img,$new_name);
}
imagedestroy($new_img);
}
//imagedestroy($new_img);
return $new_name;
}    

}
?>

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

PHP 相关文章推荐
用PHP写的基于Memcache的Queue实现代码
Nov 27 PHP
php实现cc攻击防御和防止快速刷新页面示例
Feb 13 PHP
PHP的preg_match匹配字符串长度问题解决方法
May 03 PHP
ECMall支持SSL连接邮件服务器的配置方法详解
May 19 PHP
CI(CodeIgniter)框架介绍
Jun 09 PHP
9段PHP实用功能的代码推荐
Oct 14 PHP
PHP动态柱状图实现方法
Mar 30 PHP
Laravel SQL语句记录方式(推荐)
May 26 PHP
thinkPHP+PHPExcel实现读取文件日期的方法(含时分秒)
Jul 07 PHP
php使用函数pathinfo()、parse_url()和basename()解析URL
Nov 25 PHP
php源码之将图片转化为data/base64数据流实例详解
Nov 27 PHP
PHP钩子实现方法解析
May 21 PHP
功能强大的PHP发邮件类
Aug 29 #PHP
微信网页授权(OAuth2.0) PHP 源码简单实现
Aug 29 #PHP
Laravel 5.3 学习笔记之 错误&amp;日志
Aug 28 #PHP
Laravel 5.3 学习笔记之 配置
Aug 28 #PHP
Laravel 5.3 学习笔记之 安装
Aug 28 #PHP
PHP实现导出带样式的Excel
Aug 28 #PHP
Linux系统中为php添加pcntl扩展
Aug 28 #PHP
You might like
PHP 数组遍历方法大全(foreach,list,each)
2010/06/30 PHP
php抽奖小程序的实现代码
2013/06/18 PHP
使用Composer安装Yii框架的方法
2016/03/15 PHP
php头像上传预览实例代码
2017/05/02 PHP
laravel 解决groupBy时出现的错误 isn't in Group By问题
2019/10/17 PHP
php 使用expat方式解析xml文件操作示例
2019/11/26 PHP
jQueryUI写一个调整分类的拖放效果实现代码
2012/05/10 Javascript
Javascript 面向对象(一)(共有方法,私有方法,特权方法)
2012/05/23 Javascript
onmouseover和onmouseout的一些问题思考
2013/08/14 Javascript
Extjs4中tree的拖拽功能(可以两棵树之间拖拽) 简单实例
2013/12/08 Javascript
纯js写的分页表格数据为json串
2014/02/18 Javascript
JS遍历Json字符串中键值对先转成JSON对象再遍历
2014/08/15 Javascript
JavaScript访问字符串中单个字符的两种方法
2015/07/03 Javascript
jquery实现点击弹出带标题栏的弹出层(从右上角飞入)效果
2015/09/19 Javascript
JavaScript实现数据类型的相互转换
2016/03/06 Javascript
神级程序员JavaScript300行代码搞定汉字转拼音
2017/05/20 Javascript
vue2.x 父组件监听子组件事件并传回信息的方法
2017/07/17 Javascript
Vue.js进阶知识点总结
2018/04/01 Javascript
微信小程序排坑指南详解
2018/05/23 Javascript
解决vue中修改了数据但视图无法更新的情况
2018/08/27 Javascript
Node.js 如何利用异步提升任务处理速度
2019/01/07 Javascript
Vue项目中数据的深度监听或对象属性的监听实例
2020/07/17 Javascript
Python中str.join()简单用法示例
2018/03/20 Python
python学生管理系统学习笔记
2019/03/19 Python
python操作kafka实践的示例代码
2019/06/19 Python
python设置环境变量的作用和实例
2019/07/09 Python
pytorch实现用CNN和LSTM对文本进行分类方式
2020/01/08 Python
pytorch 限制GPU使用效率详解(计算效率)
2020/06/27 Python
可爱的童装和鞋子:Fabkids
2019/08/16 全球购物
Linux机考试题
2015/10/16 面试题
毕业生造价工程师求职信
2013/10/17 职场文书
学前教育毕业生自荐信
2013/10/29 职场文书
信访维稳工作汇报
2014/10/27 职场文书
检讨书范文大全
2015/05/07 职场文书
党支部考察鉴定意见
2015/06/02 职场文书
HTML5页面音频自动播放的实现方式
2021/06/21 HTML / CSS