<?php/**文件操作类,createbylinyupark,*/classFile{protected$path;//根目录例如./uploadfunction__construct($path){if(!is_dir($path))mkdir($path,0777);$this->path=$path;}/**#文件上传函数*@input_name为表单中type为file的name值*@ext_arr为允许使用的扩展名数组,请用小写,例array('jpg','gif')*@max_size文件大小,单位b,上限请修改php.ini中的post上限和upload上限*@rand是否把上传的文件改为随机数,避免相同文件名上传*@sample如果文件为图象可以给该参数指定宽或高(x,y),比如array(100,'auto')*/publicfunctionupload($input_name,$ext_arr,$max_size,$rand=0,$sample=null){//基本错误if($_FILES[$input_name]['error']>0){switch($_FILES[$input_name]['error']){case3:return"只上传了部分文件";break;case4:return"没有文件上传";break;default:return"文件大小超标";}exit();}//文件大小if($_FILES[$input_name]['size']>$max_size){return"文件大小超标";exit();}//文件类型$type=array_shift(explode("/",$_FILES[$input_name]['type']));if(!is_dir("{$this->path}/{$type}"))mkdir("{$this->path}/{$type}");//扩展名$file_ext=strtolower(array_pop(explode(".",$_FILES[$input_name]['name'])));if(!in_array($file_ext,$ext_arr)){return"文件扩展名不符合要求";exit();}//文件名if($rand==1)$file_name=time().rand(1000,9999).".".$file_ext;else$file_name=strtolower($_FILES[$input_name]['name']);//临时文件转移if(is_uploaded_file($_FILES[$input_name]['tmp_name'])){if(!move_uploaded_file($_FILES[$input_name]['tmp_name'],"{$this->path}/{$type}/{$file_name}")){return"上传的文件移动过程中失败";exit();}}else{return"无法找到上传的临时文件";exit();}//样图if($type=="image"&&$sample!=null){list($width,$height)=getimagesize("{$this->path}/{$type}/{$file_name}");list($x,$y)=$sample;if($x!="auto")$s_width=$x;else$s_width=($y/$height)*$width;if($y!="auto")$s_height=$y;else$s_height=($x/$width)*$height;$dst_img=imagecreatetruecolor($s_width,$s_height);switch($file_ext){case'gif':$image=imagecreatefromgif("{$this->path}/{$type}/{$file_name}");break;case'png':$image=imagecreatefrompng("{$this->path}/{$type}/{$file_name}");break;case'bmp':$image=imagecreatefromwbmp("{$this->path}/{$type}/{$file_name}");break;default:$image=imagecreatefromjpeg("{$this->path}/{$type}/{$file_name}");}imagecopyresampled($dst_img,$image,0,0,0,0,$s_width,$s_height,$width,$height);//统一输出为jpgif(!is_dir("{$this->path}/sample"))mkdir("{$this->path}/sample");$sample_name=array_shift(explode(".",$file_name)).".jpg";imagejpeg($dst_img,"{$this->path}/sample/{$sample_name}",100);}return"上传任务完成";}/**#文件浏览功能函数*@url执行函数的路径*@dir_arg切换目录的参数变量*@value切换目录的值,目录名不能为中文*@del_arg删除参数变量*/publicfunctionbrowser($url,$dir_arg,$del_arg=null){//是否有参数值if(!isset($_GET[$dir_arg]))$value=$this->path;else$value=$_GET[$dir_arg];//有删除操作if(isset($_GET[$del_arg])){if(is_dir($_GET[$del_arg]))$this->rmdir($_GET[$del_arg]);elseunlink($_GET[$del_arg]);}$dir=dir($value);$pre_value=$this->path;//初始父目录$str="<dl>";//是否有上一级目录if($value!=$this->path){$pre_value=explode("/",$value);array_pop($pre_value);$pre_value=implode("/",$pre_value);$str.="<dt><ahref='{$url}?{$dir_arg}={$pre_value}'>父目录</a></dt>";}while(false!==($unit=$dir->read())){if($unit!="."&&$unit!=".."){//是否为目录if(is_dir("{$value}/{$unit}")){if($del_arg!=null)$str.="<dt><ahref='{$url}?{$dir_arg}={$value}/{$unit}'>{$unit}/</a><ahref='{$url}?{$dir_arg}={$pre_value}&{$del_arg}={$value}/{$unit}'>删除</a></dt>";else$str.="<dt><ahref='{$url}?{$dir_arg}={$value}/{$unit}'>{$unit}/</a></dt>";}else{$file=substr($value,1)."/".$unit;if($del_arg!=null)$str.="<dd><ahref='{$file}'>{$unit}</a><ahref='{$url}?{$dir_arg}={$value}&{$del_arg}={$value}/{$unit}'>删除</a></dd>";else$str.="<dd><ahref='{$file}'>{$unit}</a></dd>";}}}$dir->close();$str.="</dl>";return$str;}/**内部函数,删除目录以及里面的所有文件*/protectedfunctionrmdir($path){$dir=dir($path);while(false!==($unit=$dir->read())){if($unit!="."&&$unit!=".."){if(is_dir($path."/".$unit)){$this->rmdir($path."/".$unit);}elseunlink($path."/".$unit);}}$dir->close();rmdir($path);}}?>