欣然随风的blog
xrsf
全部博文(52)
2012年(4)
2011年(2)
2010年(1)
2009年(5)
2008年(2)
2007年(2)
2006年(14)
2005年(22)
camaro_t
Love鱼小
欧利斯基
dreamsle
fhvsbgmy
分类:
2007-03-16 14:30:50
<?php/** * 作用:文件上传类 * 时间:2006-8-20 * 作者:欣然随风 * 参数: * @file_input -- 表单上传框名称 * @file_max -- 上传最大容量(KB) * @file_path -- 上传路径 例:d:/aa/bb/../../cc/ 或 d:/aa/bb/cc/,以"/"结束 * @file_type -- 允许类型 例:$file_type = array('jpg','gif') * @file_name -- 上传后重命名称(不含扩展名) * @file_no -- 当目录不存在时是否生成 * @file_del -- 开启后将在file_path下执行同名文件删除,删除类型包括file_type */class class_upfile{ public $file_ream; // 返回真实扩展名 public $err; // 返回报告 public $off; // 返回状态 function __construct($file_input,$file_max,$file_path,$file_type,$file_name,$file_no=false,$file_del=false) { $this->file_input = $file_input; $this->file_max = $file_max; $this->file_path = $file_path; $this->file_type = $file_type; $this->file_name = $file_name; $this->file_no = $file_no; $this->file_del = $file_del; $this->check(); if($this->off) { if($_FILES[$this->file_input]['error'] == 0) { if($this->file_del) { foreach($this->file_type AS $v) { $name = $this->file_path.$this->file_name.'.'.$v; if(is_file($name)) unlink($name); } } $newfile = $this->file_path.$this->file_name.$this->file_ream; $this->off = move_uploaded_file($_FILES[$this->file_input]['tmp_name'],$newfile); if($this->off) { chmod($newfile,0777); $this->err = '文件上传成功!'; }else $this->err = '文件上传失败,请重试!'; } } } /** * 方法:检测 */ function check() { // 是否为空 if($_FILES[$this->file_input]['size'] == 0) { $this->err = '请选择上传文件!'; return $this->off = false; } // 检查文件大小 $file_size = $this->file_max * 1024; // 转为系统默认的字节 if($_FILES[$this->file_input]['size'] > $file_size) { $this->err = '文件大小不得超过'.$this->file_max.'K!'; return $this->off = false; } // 检查文件类型 switch($_FILES[$this->file_input]['type']) { case 'image/pjpeg': $this->file_ream='jpg'; break; case 'image/gif': $this->file_ream='gif'; break; case 'text/plain': $this->file_ream='txt'; break; case 'application/msword': $this->file_ream='doc'; break; case 'application/x-shockwave-flash': $this->file_ream='swf'; break; case 'application/octet-stream': $this->file_ream='fla'; break; case 'application/octet-stream': $this->file_ream='rar'; break; case 'application/x-zip-compressed': $this->file_ream='zip'; break; case 'application/octet-stream': $this->file_ream='psd'; break; } if(!in_array($this->file_ream,$this->file_type)) { $this->err = '此文件格式不支持!'; return $this->off = false; } // 检查上传路径 $this->file_path = $this->factpath($this->file_path); if(!is_dir($this->file_path)) { if(!$this->file_no) { $this->err = '上传路径错误!'; return $this->off = false; }else $this->_mkdirs($this->file_path); } $this->file_ream = '.'.$this->file_ream; return $this->off = true; } /** * 方法:换算实际路径 */ function factpath($path) { $adir = explode('/',$path); for($i=0;$i<count($adir);$i++) { $key = false; if($adir[$i] == '..') $key = $i; if($key !== false) { for($j=0;$j<count($adir);$j++) { if($j==$key-1 || $j==$key) continue; $newadir[] = $adir[$j]; } $adir = $newadir; $newadir = false; $i=$i-2; } } return $path = implode('/',$adir); } /** * 方法:按指定路径生成目录 */ function _mkdirs($path) { $adir = explode('/',$path); $dirlist = ''; $rootdir = array_shift($adir); if(!file_exists($rootdir)) mkdir($rootdir); foreach($adir as $val) { $dirlist .= '/'.$val; $dirpath = $rootdir.$dirlist; if(!file_exists($dirpath)) { mkdir($dirpath); chmod($dirpath,0777); } } }}//class end?>
上一篇:FusionCharts 的XML标签属性
下一篇:基于Smarty的地震哀悼日网页置灰办法
登录 注册