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

<script type="text/javascript"> </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 );    
    }    
}    
   
?>  

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值