PHP文件类-上传,样图,文件夹内容浏览删除

来源:互联网 发布:http js.shxedc.com 编辑:程序博客网 时间:2024/05/01 11:56
<script type="text/javascript"><!--google_ad_client = "pub-4490194096475053";/* 内容页,300x250,第一屏 */google_ad_slot = "3685991503";google_ad_width = 300;google_ad_height = 250;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<?php    
/*   
* 文件操作类,create by linyupark,   
*/   
class File    
{    
    
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')   
    
*/   
    
public function upload($input_name,$ext_arr,$max_size,$rand=0,$sample=null)    
    {    
        
//基本错误    
        if ($_FILES[$input_name]['error'> 0)    
        {    
            
switch ($_FILES[$input_name]['error'])    
            {    
                
case 3: return "只上传了部分文件"break;    
                
case 4: 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 删除参数变量   
    
*/   
    
public function browser($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]);    
            
else unlink($_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><a href='{$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><a href='{$url}?{$dir_arg}={$value}/{$unit}'>{$unit}/</a>    
                            <a href='{$url}?{$dir_arg}={$pre_value}&{$del_arg}={$value}/{$unit}'>删除</a></dt>
";    
                    
else   
                    
$str.= "<dt><a href='{$url}?{$dir_arg}={$value}/{$unit}'>{$unit}/</a></dt>";    
                }    
   
                
else   
                {    
                    
$file = substr($value,1)."/".$unit;    
                    
if($del_arg!=null)    
                    
$str.= "<dd><a href='{$file}'>{$unit}</a>    
                            <a href='{$url}?{$dir_arg}={$value}&{$del_arg}={$value}/{$unit}'>删除</a></dd>
";    
                    
else   
                    
$str.= "<dd><a href='{$file}'>{$unit}</a></dd>";    
                }    
            }    
        }    
        
$dir->close();    
        
$str.= "</dl>";    
        
return $str;    
    }    
   
    
/*   
    * 内部函数,删除目录以及里面的所有文件   
    
*/   
    
protected function rmdir($path)    
    {    
        
$dir = dir($path);    
        
while (false!==($unit=$dir->read()))    
        {    
            
if($unit!="."&&$unit!="..")    
            {    
                
if(is_dir($path."/".$unit))    
                {    
                    
$this->rmdir($path."/".$unit);    
                }    
                
else unlink($path."/".$unit);    
            }    
        }    
        
$dir->close();    
        
rmdir($path);    
    }    
}    
   
?> 

 
原创粉丝点击