功能强大的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的FTP学习(一)
Oct 09 PHP
谈谈新手如何学习PHP
Dec 14 PHP
程序员编程十条戒律
Jul 09 PHP
PHP排序之二维数组的按照字母排序实现代码
Aug 13 PHP
不使用php api函数实现数组的交换排序示例
Apr 13 PHP
ThinkPHP使用smarty模板引擎的方法
Jul 01 PHP
详解PHP中的null合并运算符
Dec 30 PHP
php连接oracle数据库的方法(测试成功)
May 26 PHP
php实现图片上传时添加文字和图片水印技巧
Apr 18 PHP
PHP树-不需要递归的实现方法
Jun 21 PHP
深入浅出讲解:php的socket通信原理
Dec 03 PHP
Yii2使用$this-&gt;context获取当前的Module、Controller(控制器)、Action等
Mar 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
php数据库抽象层 PDO
2011/05/07 PHP
php若干单维数组遍历方法的比较
2011/09/20 PHP
与文件上传有关的php配置参数总结
2013/06/14 PHP
php获取发送给用户的header信息的方法
2015/03/16 PHP
PHP中overload与override的区别
2017/02/13 PHP
详解PHP实现支付宝小程序用户授权的工具类
2018/12/25 PHP
PHP yield关键字功能与用法分析
2019/01/03 PHP
PHP7引入的&quot;??&quot;和&quot;?:&quot;的区别讲解
2019/04/08 PHP
php 使用html5 XHR2实现上传文件与进度显示功能示例
2020/03/03 PHP
繁简字转换功能
2006/07/19 Javascript
javascript while语句和do while语句的区别分析
2007/12/08 Javascript
JavaScript 三种创建对象的方法
2009/10/16 Javascript
JavaScript 面向对象之命名空间
2010/05/04 Javascript
js 调用百度地图api并在地图上进行打点添加标注
2014/05/13 Javascript
浅谈jQuery中setInterval()方法
2015/07/07 Javascript
深入探讨前端框架react
2015/12/09 Javascript
基于JavaScript实现轮播图代码
2016/07/14 Javascript
BootStrap 页签切换失效的解决方法
2017/08/17 Javascript
详解ES6语法之可迭代协议和迭代器协议
2018/01/13 Javascript
Vue拖拽组件列表实现动态页面配置功能
2019/06/17 Javascript
基于js实现复制内容到操作系统粘贴板过程解析
2019/10/11 Javascript
JS手写一个自定义Promise操作示例
2020/03/16 Javascript
全面了解python字符串和字典
2016/07/07 Python
python实现发送邮件功能
2017/07/22 Python
Django进阶之CSRF的解决
2018/08/01 Python
Django Rest framework三种分页方式详解
2019/07/26 Python
pandas 对日期类型数据的处理方法详解
2019/08/08 Python
python批量解压zip文件的方法
2019/08/20 Python
Python爬虫与反爬虫大战
2020/07/30 Python
css3实现一款模仿iphone样式的注册表单
2013/03/20 HTML / CSS
CSS3 实现倒计时效果
2020/11/25 HTML / CSS
使用分层画布来优化HTML5渲染的教程
2015/05/08 HTML / CSS
使用useBean标志初始化BEAN时如何接受初始化参数
2012/02/11 面试题
教师正风肃纪剖析材料
2014/10/20 职场文书
公司开除员工通知
2015/04/22 职场文书
消防安全培训工作总结
2015/10/23 职场文书