功能强大的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 相关文章推荐
PHPShop存在多个安全漏洞
Oct 09 PHP
php session 预定义数组
Mar 16 PHP
header跳转和include包含问题详解
Sep 08 PHP
显示youtube视频缩略图和Vimeo视频缩略图代码分享
Feb 13 PHP
PHP中的命名空间详细介绍
Jul 02 PHP
Smarty变量用法详解
May 11 PHP
PHP支付系统设计与典型案例分享
Aug 02 PHP
php版微信发红包接口用法示例
Sep 23 PHP
php实现当前页面点击下载文件的实例代码
Nov 16 PHP
PHP对象、模式与实践之高级特性分析
Dec 08 PHP
thinkPHP5框架接口写法简单示例
Aug 05 PHP
php接口隔离原则实例分析
Nov 11 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
web方式ftp
2006/10/09 PHP
实现分十页分向前十页向后十页的处理
2006/10/09 PHP
PHP与MongoDB简介|安全|M+PHP应用实例详解
2013/06/17 PHP
PHP中生成UUID自定义函数分享
2015/06/10 PHP
PHP基于Closure类创建匿名函数的方法详解
2017/08/17 PHP
thinkphp5.0整合phpsocketio完整攻略(绕坑)
2018/10/12 PHP
ExtJs Excel导出并下载IIS服务器端遇到的问题
2011/09/16 Javascript
jquery遍历函数siblings()用法实例
2015/12/24 Javascript
AngularJS页面访问时出现页面闪烁问题的解决
2016/03/06 Javascript
jQuery实现根据滚动条位置加载相应内容功能
2016/07/18 Javascript
nodejs搭建本地服务器并访问文件的方法
2017/03/03 NodeJs
jQuery插件FusionCharts绘制ScrollColumn2D图效果示例【附demo源码下载】
2017/03/22 jQuery
浅谈js-FCC算法Friendly Date Ranges(详解)
2017/04/10 Javascript
JavaScript如何对图片进行黑白化
2018/04/10 Javascript
Vue-resource安装过程及使用方法解析
2020/07/21 Javascript
vue.js 解决v-model让select默认选中不生效的问题
2020/07/28 Javascript
如何利用JS将手机号中间四位变成*号
2020/09/29 Javascript
使用jQuery实现购物车
2020/10/29 jQuery
Python Trie树实现字典排序
2014/03/28 Python
python各种语言间时间的转化实现代码
2016/03/23 Python
python 实现一个贴吧图片爬虫的示例
2017/10/12 Python
Python在不同目录下导入模块的实现方法
2017/10/27 Python
Python中顺序表原理与实现方法详解
2019/12/03 Python
python读取csv文件指定行的2种方法详解
2020/02/13 Python
解决python Jupyter不能导入外部包问题
2020/04/15 Python
英国天然抗衰老护肤品品牌:Nakin Skin Care
2019/04/16 全球购物
xxx同志考察材料
2014/02/07 职场文书
网络管理员岗位职责
2014/03/17 职场文书
经贸专业毕业生求职信范文
2014/05/01 职场文书
人力资源管理专业求职信
2014/07/23 职场文书
入党介绍人意见怎么写
2015/06/03 职场文书
导游带团欢迎词
2015/09/30 职场文书
《植物妈妈有办法》教学反思
2016/02/23 职场文书
幼儿园教学反思范文
2016/03/02 职场文书
my.ini优化mysql数据库性能的十个参数(推荐)
2021/05/26 MySQL
FP-growth算法发现频繁项集——构建FP树
2021/06/24 Python