|
<?php
/*
*文件操作类,createbylinyupark,
*/
classFile
{
protected$path;//根目录例如./upload
function__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);
//统一输出为jpg
if(!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);
}
}
?>
|
|
|