设为首页 收藏本站
查看: 831|回复: 0

[经验分享] PHP文件类-上传,样图,文件夹内容浏览删除

[复制链接]

尚未签到

发表于 2017-4-14 07:35:30 | 显示全部楼层 |阅读模式
DSC0000.gif <?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);
}
}

?>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-364651-1-1.html 上篇帖子: 我就给一个PHP逆波兰表达式的算法吧---工资计算专用 下篇帖子: 使用Rails 数据库DSL与PHP协作开发
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表