|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- <?php
- if (!defined('DEDEINC')) exit('dedebiz');
- /**
- * 文件管理逻辑类
- *
- * @version $id:file_class.php 19:09 2010年7月12日 tianya $
- * @package DedeBIZ.Administrator
- * @copyright Copyright (c) 2022 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;
- $oldext = pathinfo($oldname)['extension'];
- $newext = pathinfo($newname)['extension'];
- if ($oldext != $newext) {
- if (preg_match('#\.(php|pl|cgi|asp|aspx|jsp|php5|php4|php3|shtm|shtml)$#i', trim($newname))) {
- ShowMsg("指定的文件名已被系统禁止", "javascript:;");
- exit();
- }
- }
- 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("移动文件<span class='text-primary'>$oldfile</span>><span class='text-primary'>$truepath/$mfile</span>失败,可能是某个位置权限不足", "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 (substr($filename, -strlen($fileexp)) === $fileexp) {
- $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("系统禁止删除<span class='text-primary'>".$t."</span>", "file_manage_main.php?activepath=".$this->activeDir);
- exit;
- }
- }
- ShowMsg("成功删除一个<span class='text-primary'>".$t."</span>", "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;
- }
- }
- ?>
|