功能强大的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经典的给图片加水印程序
Dec 06 PHP
PHP 强制性文件下载功能的函数代码(任意文件格式)
May 26 PHP
PHP导出MySQL数据到Excel文件(fputcsv)
Jul 03 PHP
php遍历文件夹所有文件子文件夹函数代码
Nov 27 PHP
PHP中的替代语法简介
Aug 22 PHP
PHP中使用Imagick读取pdf并生成png缩略图实例
Jan 21 PHP
学习php设计模式 php实现装饰器模式(decorator)
Dec 07 PHP
功能强大的php文件上传类
Aug 29 PHP
PHP遍历目录文件的常用方法小结
Feb 03 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
Sep 17 PHP
PHP7内核CGI与FastCGI详解
Apr 14 PHP
详解Go与PHP的语法对比
May 29 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
Zend Framework教程之Zend_Db_Table_Row用法实例分析
2016/03/21 PHP
PHP中mysqli_get_server_version()的实例用法
2020/02/03 PHP
使用JS操作页面表格,元素的一些技巧
2007/02/02 Javascript
理解Javascript_12_执行模型浅析
2010/10/18 Javascript
js去除空格的12种实用方法
2013/11/08 Javascript
js中自定义方法实现停留几秒sleep
2014/07/11 Javascript
jQuery插件制作的实例教程
2016/05/16 Javascript
JavaScript性能优化总结之加载与执行
2016/08/11 Javascript
vue loadmore组件上拉加载更多功能示例代码
2017/07/19 Javascript
ActiveX控件的使用-js实现打印超市小票功能代码详解
2017/11/22 Javascript
Vue CLI3基础学习之pages构建多页应用
2019/06/02 Javascript
javascript实现弹幕墙效果
2019/11/28 Javascript
微信小程序之滑动页面隐藏和显示组件功能的实现代码
2020/06/19 Javascript
在vue中实现echarts随窗体变化
2020/07/27 Javascript
[50:27]Secret vs VG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python3 适合初学者学习的银行账户登录系统实例
2017/08/08 Python
Python编程中NotImplementedError的使用方法
2018/04/21 Python
面向初学者的Python编辑器Mu
2018/10/08 Python
解决django xadmin主题不显示和只显示bootstrap2的问题
2020/03/30 Python
python中pyplot基础图标函数整理
2020/11/10 Python
详解用selenium来下载小姐姐图片并保存
2021/01/26 Python
常用的HTML5列表标签
2017/06/20 HTML / CSS
阿迪达斯加拿大官网:Adidas加拿大
2016/08/25 全球购物
戴尔新西兰官网:Dell New Zealand
2020/01/07 全球购物
澳大利亚有机化妆品网上商店:The Well Store
2020/02/20 全球购物
Java程序员常见面试题
2015/07/16 面试题
便利店投资的创业计划书
2014/01/12 职场文书
一年级学生评语
2014/04/23 职场文书
办公室文员岗位职责范本
2014/06/12 职场文书
感情真挚的毕业生求职信
2014/07/19 职场文书
月考总结与反思
2015/10/22 职场文书
竞聘演讲报告:基本写作有哪些?附开头范文
2019/10/16 职场文书
pycharm2021激活码使用教程(永久激活亲测可用)
2021/03/30 Python
css3 filter属性的使用简介
2021/03/31 HTML / CSS
Windows下redis下载、redis安装及使用教程
2021/06/02 Redis
Mybatis 一级缓存和二级缓存原理区别
2022/09/23 Java/Android