★再共享一个最方便的文件上传类★
时间:2006-12-23
来源:互联网
当然对上传单个文件就更不用说了,希望大家能喜欢!! :)
PHP代码:
/*@名称:UPLOAD_CLASS
@功能:上传文件,可以是单个文件式或数组式
@作者:袁维
@版本:V1.0
@时间:2006-12-3
*/
class UPLOAD_CLASS
{
var $fexts='*'; //允许上传的文件扩展名集合,"*":表示任何文件;格式为:".jpg|.swf|.png"
var $max_size=0; //允许的最大文件大小,单位以K. 0:表示任何大小
var $is_del=false; //当目标文件存在时是否删除
var $uploaded_file=''; //已上传成功的文件名,多个用","隔开
var $input_name; //FILE控件名称
/* 功能:构造函数
参数:$input_name:表单中FILE控件名称,如 <input type="file" name="upfile"> 中的"upfile"
也可以控件是数组,如 <input type="file" name="up_file[]">
<input type="file" name="up_file[]">
*/
function UPLOAD_CLASS($input_name='')
{
if($input_name == '')
{
echo '<b>UPLOAD_CLASS类构造出错:请指定表单中FILE控件的名称!如: $up = new UPLOAD_CLASS("up_file");</b>';
}
$this->input_name = $input_name;
}
/* 设置最大上传的文件大小 */
function set_size($max_size)
{
$this->max_size = $max_size * 1024;
}
/* 设置上传文件的扩展名集合 */
function set_fexts($exts)
{
$this->fexts = $exts;
}
/* 设置目标文件存在时是否删除 */
function set_del($bool)
{
$this->is_del = $bool;
}
/* 功能:上传文件操作
参数:$dst_file:上传后的目标文件名,如果没有加扩展名则上传时自动加上原文件扩展名.
如果FILE控件是数组,则 $dst_file 为目标文件个数与上传的文件数匹配的数组,如下:
array('./img/a.jpg','./img/b.jpg') 也可为 array('./img/a','./img/b')
返回值: [-1]成功 [0]:没有上传的文件 [1]:文件超过大小 [2]:不是指定的类型
[3]:目标文件已存在 [4]:目标文件不能写入 [5]:目标文件个数与上传的文件数不匹配
*/
function upload($dst_file)
{
$ay = $_FILES[$this->input_name]['name'];
if(is_array($ay)) //表单中的FILE控件是数组
{
if( !is_array($dst_file) || count($ay) != count($dst_file) ) return 5;
$tmp_ay = array(); //临时数组保存暂时已上传成功的文件名,用于所有文件没有完全上传成功的情况删除它们
$ret = -1;
foreach($ay as $key=>$val)
{
$file_name = $_FILES[$this->input_name]['name'][$key]; //上传的原文件名
$file_size = $_FILES[$this->input_name]['size'][$key]; //上传后的临时文件名
$tmp_file = $_FILES[$this->input_name]['tmp_name'][$key];//文件大小
if($file_name != '') //该控件上传了文件
{
$ret = $this->_upload($file_name,$tmp_file,$file_size,$dst_file[$key]);
if( $ret != -1 ) //如果文件没有上传成功,就要删除已经上传的文件
{
for($i=0; $i<count($tmp_ay); $i++) @unlink($tmp_ay[$i]);
break;
}
$tmp_ay[]=$dst_file[$key];
}
}//End Foreach
return $ret;
}else{
//---上传单个文件上传
$file_name = $_FILES[$this->input_name]['name']; //上传的原文件名
$tmp_file = $_FILES[$this->input_name]['tmp_name'];//上传后的临时文件名
$file_size = $_FILES[$this->input_name]['size']; //文件大小
return $this->_upload($file_name,$tmp_file,$file_size,$dst_file);
}
}
/* 功能:得到已上传成功的文件名,多个用","隔开
参数: $flg [0]:文件名有完整的路径 [1]:文件名不带路径
*/
function uploaded_files($flg=0)
{
$files = '';
if( $flg == 0 )
{
$files = $this->uploaded_file;
}else{
$ay=explode(',',$this->uploaded_file);
for($i=0; $i<count($ay); $i++)
{
if( $files == '' )
{
$files = basename($ay[$i]);
}else{
$files .= ','.basename($ay[$i]);
}
}
}
return $files;
}
/* 得到上传的信息,如果FILE控件是个数组,则返回的是个二维数组,否则返回是一级数组 */
function &uploadInfo()
{
$ay=array();
if(!is_array($_FILES[$input_name]['name']))
{
$ay['name'] = $_FILES[$this->input_name]['name'];
$ay['ext'] = strtolower(strrchr($ay['name'],'.'));
$ay['type'] = $_FILES[$this->input_name]['type'];
$ay['size'] = $_FILES[$this->input_name]['size'];
$ay['tmp_name'] = $_FILES[$this->input_name]['tmp_name'];
}else{
foreach($_FILES[$input_name]['name'] as $i=>$val)
{
$ay[$i]['name'] = $_FILES[$this->input_name]['name'][$i];
$ay[$i]['ext'] = strtolower(strrchr($ay[$i]['name'],'.'));
$ay[$i]['type'] = $_FILES[$this->input_name]['type'][$i];
$ay[$i]['size'] = $_FILES[$this->input_name]['size'][$i];
$ay[$i]['tmp_name'] = $_FILES[$this->input_name]['tmp_name'][$i];
}
}//End If
return $ay;
}
/* 功能: 得到上传的状态,数组包含 总的上传个数 和 真实文件个数(FILE控件数组中选择的文件数)
返回: $ay['sum']:总的上传个数 $ay['up']:真实文件个数
*/
function &upload_state()
{
$ay=array('sum'=>0,'up'=>0);
if(!is_array($_FILES[$this->input_name]['name']))
{
$ay['sum']++;
if( $_FILES[$this->input_name]['name'] != '' ) $ay['up']++;
}else{
foreach($_FILES[$this->input_name]['name'] as $i=>$val)
{
$ay['sum']++;
if( $_FILES[$this->input_name]['name'][$i] != '' ) $ay['up']++;
}
}//End If
return $ay;
}
/* 得到小写的文件扩展名,如".php" */
function file_ext($file_name)
{
return strtolower(strrchr($file_name,"."));
}
/* -私有成员函数,不直接调用- */
function _upload($file_name,$tmp_file,$file_size,$dst_file)
{
$ext = $this->file_ext($file_name); //得到原文件扩展名
$dst_file = str_replace("\\",'/',$dst_file); //兼容windows
if( $tmp_file=='' || $file_size< 1 || !is_uploaded_file($tmp_file) )//没有上传的文件
{
return 0;
}
if( $this->max_size != 0 ) //限制了上传文件的大小
{
if($file_size > $this->max_size) //文件大小超过了限制
{
return 1;
}
}
if( $this->fexts != "*") //限制了上传文件的类型
{
if( strstr($this->fexts,$ext) == '' )//不是指定的文件类型
{
return 2;
}
}
if( $dst_file[strlen($dst_file)-1] == '/' ) //没有目标文件名,如"./file/"
{
return 4;
}
//---从最后的"/"处得到文件名,已更准确的判断目标文件是否加了扩展名
if( strrchr($dst_file,"/") != '' ) //如果目标文件是这种形式:"./file_dir/picfile"
{
$tmp_file_name=strrchr($dst_file,"/"); //得到如"/picfile"
}else{
$tmp_file_name=$dst_file;
}
if( strrchr($tmp_file_name,".") == '') //目标文件没有加扩展名就加上原文件扩展名
{
$dst_file .= $ext;
}
//---如果目标文件存在判断是否删除它
if(file_exists($dst_file))
{
if($this->is_del)
{
@unlink($dst_file);
}else{
return 3;
}
}
//---复制上传的文件到目标文件
if(@copy($tmp_file,$dst_file))
{
@chmod($dst_file,0777);
}else{
return 4;
}
@unlink($tmp_file);
if( $this->uploaded_file == '' ) //文件上传成功就记录文件
{
$this->uploaded_file = $dst_file;
}else{
$this->uploaded_file .= ','.$dst_file;
}
return -1;
}
}//End Class
/* -----------表单中FILE控件是数组,多文件上传的调用例子如下--------------------------------*/
$upload = new UPLOAD_CLASS('pic_file'); //FILE控件的名称,这里是数组
$upload->set_fexts('.jpg|.jpeg|.gif|.png');
$upload->set_size(200); //KB
$up_ay = $upload->upload_state(); //得到上传的状态,以更好的进行上传操作
if( $up_ay['up'] > 0 ) //如果用户上传了相片
{
for($i=0; $i<$up_ay['sum']; $i++) //生成对应的目标文件
{
$dst_file[] = get_rnd_filename(); //随机文件名,不含扩展名,因为UPLOAD_CLASS类可以自己加上上传文件的扩展名
}
$val = $upload->upload($dst_file);
switch($val)
{
case 1:
$msg='你上传的照片太大了,';
break;
case 2:
$msg='你上传的照片不是指定的类型,';
break;
default:
$msg='你上传的照片不合法,';
break;
}
}
/*------------单个文件上传调用例子如下----------------------------------*/
$upload = new UPLOAD_CLASS('pic_file');//FILE控件的名称
$upload->set_fexts('.jpg|.jpeg|.gif|.png');
$upload->set_size(200); //KB
$up_ay = $upload->upload_state(); //得到上传的状态,以更好的进行上传操作
if( $up_ay['up'] > 0 ) //如果用户上传了相片
{
$dst_file = get_rnd_filename(); //随机文件名,不含扩展名,因为UPLOAD_CLASS类可以自己加上上传文件的扩展名
$val = $upload->upload($dst_file);
switch($val)
{
case 1:
$msg='你上传的照片太大了,';
break;
case 2:
$msg='你上传的照片不是指定的类型,';
break;
default:
$msg='你上传的照片不合法,';
break;
}
}
作者: bzby555 发布时间: 2006-12-23
作者: leehui1983 发布时间: 2006-12-23


作者: fengyun 发布时间: 2006-12-23
作者: bzby555 发布时间: 2006-12-23
作者: leehui1983 发布时间: 2006-12-23
作者: cator 发布时间: 2006-12-23

作者: leehui1983 发布时间: 2006-12-23
作者: hy0kl 发布时间: 2006-12-24
作者: leehui1983 发布时间: 2006-12-24
作者: caibird 发布时间: 2007-01-10
作者: Poon 发布时间: 2007-01-12
作者: yyb 发布时间: 2007-03-02
作者: aerial 发布时间: 2007-03-20
作者: louis75168611 发布时间: 2007-03-26
PHP代码:
if( $up_ay['up'] > 0 ) //如果用户上传了相片{
for($i=0; $i<$up_ay['sum']; $i++) //生成对应的目标文件
{
$dst_file[] = get_rnd_filename(); //随机文件名,不含扩展名,因为UPLOAD_CLASS类可以自己加上上传文件的扩展名
}
$val = $upload->upload($dst_file);
switch($val)
{
case 1:
$msg='你上传的照片太大了,';
break;
case 2:
$msg='你上传的照片不是指定的类型,';
break;
default:
$msg='你上传的照片不合法,';
break;
}
}
我觉得也应该弄到类里面去check
作者: muqiao 发布时间: 2007-03-27
作者: flymouse 发布时间: 2007-03-27
作者: flymouse 发布时间: 2007-03-27
只有实例化类,和一些基本设置,如何调用。
作者: 特蓝克斯 发布时间: 2007-03-28
作者: dayu 发布时间: 2007-03-28
引用:
原帖由 特蓝克斯 于 2007-3-28 10:06 发表怎么调用上传图片。
只有实例化类,和一些基本设置,如何调用。
PHP代码:
$upload = new UPLOAD_CLASS('img_file');$upload->set_fexts('.jpg|.jpeg|.gif|.png');
$upload->set_size(150);//K
$up_ay = $upload->upload_state();
if( $up_ay['up'] < 1 ) //没有上传了相片
{
Msg_Page('请上传商品显示的图片!');
return;
}
$dst_file = SAVE_PRODUCT_IMG . get_rnd_filename(); //32位随机文件名,不含扩展名,因为UPLOAD_CLASS类可以自己加上原扩展名
$val = $upload->upload($dst_file);
if( $val != -1 )
{
switch($val)
{
case 1:
$msg='你上传的图片太大了!';
break;
case 2:
$msg='你上传的图片不是指定的类型!';
break;
default:
$msg='你上传的图片不合法!';
break;
}
Msg_Page($msg);
return;
}
$img_file = $upload->uploaded_files(); //完整路很的文件名,如 /http/site/img/ks.jpg
//$img_file = $upload->uploaded_files(1); //基本文件名,如 ks.jpg
copy($img_file,'/tmp/tmp.bak');
作者: bzby555 发布时间: 2007-03-28
作者: janefs 发布时间: 2007-10-17
do you distill it from codeigniter?:)
作者: sunbaltti 发布时间: 2007-10-17
作者: chouyu 发布时间: 2007-10-18
作者: kissweb 发布时间: 2007-10-21
作者: hdp13 发布时间: 2008-05-30
作者: chxugao 发布时间: 2008-08-05
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28