|
- <?php if(!defined('DEDEINC')) exit('dedecms');
- /**
- * 文件管理逻辑类
- *
- * @version $Id: file_class.php 1 19:09 2010年7月12日Z tianya $
- * @package DedeCMS.Administrator
- * @copyright Copyright (c) 2020, DedeBIZ.COM
- * @license https://www.dedebiz.com/license
- * @link https://www.dedebiz.com
- */
- class FileManagement
- {
- var $baseDir="";
- var $activeDir="";
-
- //是否允许文件管理器删除目录;
- //默认为不允许 0 ,如果希望可能管理整个目录,请把值设为 1 ;
- var $allowDeleteDir=0;
-
- //初始化系统
- function Init()
- {
- global $cfg_basedir, $activepath;
- $this->baseDir = $cfg_basedir;
- $this->activeDir = $activepath;
- }
-
- //更改文件名
- function RenameFile($oldname,$newname)
- {
- $oldname = $this->baseDir.$this->activeDir."/".$oldname;
- $newname = $this->baseDir.$this->activeDir."/".$newname;
- if(($newname!=$oldname) && is_writable($oldname))
- {
- rename($oldname,$newname);
- }
- ShowMsg("成功更改一个文件名!","file_manage_main.php?activepath=".$this->activeDir);
- return 0;
- }
-
- //创建新目录
- function NewDir($dirname)
- {
- $newdir = $dirname;
- $dirname = $this->baseDir.$this->activeDir."/".$dirname;
- if(is_writable($this->baseDir.$this->activeDir))
- {
- MkdirAll($dirname,$GLOBALS['cfg_dir_purview']);
- CloseFtp();
- ShowMsg("成功创建一个新目录!","file_manage_main.php?activepath=".$this->activeDir."/".$newdir);
- return 1;
- }
- else
- {
- ShowMsg("创建新目录失败,因为这个位置不允许写入!","file_manage_main.php?activepath=".$this->activeDir);
- return 0;
- }
- }
-
- /**
- * 移动文件
- *
- * @access public
- * @param string $mfile 文件
- * @param string $mpath 路径
- * @return string
- */
- function MoveFile($mfile, $mpath)
- {
- if($mpath!="" && !preg_match("#\.\.#", $mpath))
- {
- $oldfile = $this->baseDir.$this->activeDir."/$mfile";
- $mpath = str_replace("\\","/",$mpath);
- $mpath = preg_replace("#\/{1,}#", "/", $mpath);
- if(!preg_match("#^/#", $mpath))
- {
- $mpath = $this->activeDir."/".$mpath;
- }
- $truepath = $this->baseDir.$mpath;
- if(is_readable($oldfile) && is_readable($truepath) && is_writable($truepath))
- {
- if(is_dir($truepath))
- {
- copy($oldfile, $truepath."/$mfile");
- }
- else
- {
- MkdirAll($truepath, $GLOBALS['cfg_dir_purview']);
- CloseFtp();
- copy($oldfile,$truepath."/$mfile");
- }
- unlink($oldfile);
- ShowMsg("成功移动文件!","file_manage_main.php?activepath=$mpath",0,1000);
- return 1;
- }
- else
- {
- ShowMsg("移动文件 $oldfile -> $truepath/$mfile 失败,可能是某个位置权限不足!","file_manage_main.php?activepath=$mpath",0,1000);
- return 0;
- }
- }
- else
- {
- ShowMsg("对不起,你移动的路径不合法!","-1",0,5000);
- return 0;
- }
- }
-
- /**
- * 删除目录
- *
- * @param unknown_type $indir
- */
- function RmDirFiles($indir)
- {
- if(!is_dir($indir))
- {
- return ;
- }
- $dh = dir($indir);
- while($filename = $dh->read())
- {
- if($filename == "." || $filename == "..")
- {
- continue;
- }
- else if(is_file("$indir/$filename"))
- {
- @unlink("$indir/$filename");
- }
- else
- {
- $this->RmDirFiles("$indir/$filename");
- }
- }
- $dh->close();
- @rmdir($indir);
- }
-
- /**
- * 获得某目录合符规则的文件
- *
- * @param unknown_type $indir
- * @param unknown_type $fileexp
- * @param unknown_type $filearr
- */
- function GetMatchFiles($indir, $fileexp, &$filearr)
- {
- $dh = dir($indir);
- while($filename = $dh->read())
- {
- $truefile = $indir.'/'.$filename;
- if($filename == "." || $filename == "..")
- {
- continue;
- }
- else if(is_dir($truefile))
- {
- $this->GetMatchFiles($truefile, $fileexp, $filearr);
- }
- else if(preg_match("/\.(".$fileexp.")/i",$filename))
- {
- $filearr[] = $truefile;
- }
- }
- $dh->close();
- }
-
- /**
- * 删除文件
- *
- * @param unknown_type $filename
- * @return unknown
- */
- function DeleteFile($filename)
- {
- $filename = $this->baseDir.$this->activeDir."/$filename";
- if(is_file($filename))
- {
- @unlink($filename); $t="文件";
- }
- else
- {
- $t = "目录";
- if($this->allowDeleteDir==1)
- {
- $this->RmDirFiles($filename);
- } else
- {
- // 完善用户体验,by:sumic
- ShowMsg("系统禁止删除".$t."!","file_manage_main.php?activepath=".$this->activeDir);
- exit;
- }
-
- }
- ShowMsg("成功删除一个".$t."!","file_manage_main.php?activepath=".$this->activeDir);
- return 0;
- }
- }
-
- //目录文件大小检测类
- class SpaceUse
- {
- var $totalsize=0;
-
- function checksize($indir)
- {
- $dh=dir($indir);
- while($filename=$dh->read())
- {
- if(!preg_match("#^\.#", $filename))
- {
- if(is_dir("$indir/$filename"))
- {
- $this->checksize("$indir/$filename");
- }
- else
- {
- $this->totalsize=$this->totalsize + filesize("$indir/$filename");
- }
- }
- }
- }
-
- function setkb($size)
- {
- $size=$size/1024;
-
- if($size>0)
- {
- list($t1,$t2)=explode(".",$size);
- $size=$t1.".".substr($t2,0,1);
- }
- return $size;
- }
-
- function setmb($size)
- {
- $size=$size/1024/1024;
- if($size>0)
- {
- list($t1,$t2)=explode(".",$size);
- $size=$t1.".".substr($t2,0,2);
- }
- return $size;
- }
- }
|