📄 do.php
字号:
<?
/*
*#########################################
* PHPCMS 文件管理器 v4.01
* Copyright (c) 2004-2006 phpcms.cn
* 作者:Longbill ( http://www.longbill.cn )
* 请保留版权信息
*#########################################
*/
include_once("pre_do.php");
include_once("func.php");
@error_reporting(1);
$user=check_login();
$root=$user["root"];
if (!$user) exitme("alert('登陆超时!');window.location='index.php';","eval");
$path = dealpath($path);
$action1 = $_COOKIE["action1"];
if (!is_dir($root)) @mkdir($root);
if (!$path)
{
exitme("alert('你没有权限查看此目录!');opendir('$root');","eval");
}
include_once("class/longbill.class.php");
$lb=new longbill;
$lb->ftp_host=$ftp_host;
$lb->ftp_user=$ftp_user;
$lb->ftp_pass=$ftp_pass;
if (!$path && $_COOKIE["cpass"]) $path=$_COOKIE["cpass"];
if (!is_file($path) && !is_dir($path)) exitme("alert('找不到文件或文件夹:$path');opendir('$root');","eval");
if (is_dir($path) && substr($path,-1)!="/") $path.="/";
/////////////输出目录数据////////////
if ($action=="list")
{
if ($up=="yes")
{
$path=substr(0,strlen($path)-1,$path);
$path=dirname($path)."/";
}
$lb->dir($path,$sdir,$sfile,$size);
$s="";
$viewhidefiles = ($user["viewhidefiles"] && $_POST["viewhidefiles"]);
if (!is_array($hidefiles)) $hidefiles = array();
if (file_exists($path.'~folderdata~.php'))
{
$lines = @file($path.'~folderdata~.php');
for($i=1;$i<count($lines);$i++)
{
$v = $lines[$i];
if (strpos($v,"|") === false) continue;
$arr = explode("|",$v);
if ($arr[0] == "hidefiles")
{
for ($j=1;$arr[$j];$j++)
{
$hidefiles["{$arr[$j]}"] = true;
}
}
}
}
foreach($sdir as $v)
{
if ($hidefiles["{$v}"])
{
if (!$viewhidefiles) continue;
else $s.="||{$v}[/hide]";
}
else $s.="||{$v}";
}
for($i=0;$i<count($sfile);$i++)
{
if ($hidefiles["{$sfile[$i]}"])
{
if (!$viewhidefiles) continue;
$s.="||{$sfile[$i]}[/hide]|".dealsize($size[$i]);
}
else $s.="||".$sfile[$i]."|".dealsize($size[$i]);
}
$s.="||";
exitme($s);
}
///////////////批量删除////////////////
else if ($action=="delete" && $user["delete"])
{
$sfile=urldecode1($_POST["sfile"]);
$sdir=urldecode1($_POST["sdir"]);
$dn=0; $fn=0; $err=""; $logstr="批量删除,路径:$path:\n";
$arr=explode("|",$sfile);
foreach($arr as $v)
{
if ($v=="") continue;
$filename=$path.$v;
echo "开始删除文件 $filename \n";
$ftype = getext($v);
if ($user["limit"]["$ftype"] && !$user["only"])
$err.="文件{$v}删除失败:不能删除{$user["limittype"]}类型的文件!\n";
else if (!$user["limit"]["$ftype"] && $user["only"])
$err.="文件{$v}删除失败:不能删除除{$user["limittype"]}类型以外的文件!\n";
else if (is_file($filename) && @unlink($filename))
{
$fn++;
$logstr.=" 文件,$v,成功\n";
}
else
$err.="文件{$v}删除失败!\n";
}
$arr=explode("|",$sdir);
foreach($arr as $v)
{
if ($v=="") continue;
$filename=$path.$v;
if ($lb->del_dir($filename,$info,$err))
$logstr.=" 目录,$v,成功\n";
else
$err.="目录{$v}删除失败!\n";
$dn+=$info["dir"];
$fn+=$info["file"];
}
$logstr.="删除完成,错误信息:".($err)?$err:"无";
inlog($logstr);
$str.=($fn+$dn == 0)?"Nothing has been deleted!":"You have deleted:";
$str.=($dn)?"\n{$dn} folder":"";
$str.=($dn>=2)?"s":"";
$str.=($fn)?"\n{$fn} file":"";
$str.=($fn >=2)?"s":"";
$str.=($err)?"\n\nErrors:\n$err":"";
exitme($str);
}
//////////////新建目录////////////////
else if ($action=="newdir" && $user["newdir"])
{
$name1 = checkfilename($name);
if ($name1 != $name) exitme("目录名有误!",0);
$filename=dealpath($path.$name);
if (is_dir($filename)) exitme("目录 $name 已经存在!",0);
if (mkdir($filename,0777))
{
inlog("创建目录,$filename,成功");
exitme("目录 $name 创建成功!!");
}
else
{
exitme("目录 $name 创建失败!!",0);
}
}
/////////////新建文件///////////
else if ($action=="newfile" && $user["newfile"])
{
$name1=checkfilename($name);
if ($name1 != $name) exitme("文件名有误!",0);
checktype($name,"新建");
$filename=dealpath($path.$name);
if (is_file($filename) || is_dir($filename)) exitme("有同名文件或文件夹存在!",0);
if (@fclose(@fopen($filename,"a")))
{
inlog("新建文件,$filename,成功");
exitme("文件 $name 创建成功!!");
}
else
exitme("文件 $name 创建失败!!",0);
}
//////////////重命名//////////////
else if ($action=="rename" && $user["rename"])
{
$file1 = checkfilename($file1);
$file2 = checkfilename($file2);
$filename2=dealpath($path.$file2);
$filename1=dealpath($path.$file1);
if ($filename1!=$path.$file1 || $filename2!=$path.$file2) exitme("文件或文件夹名错误!",0);
checktype($filename1,"重命名");
checktype($filename2,"重命名");
if (is_file($filename2) || is_dir($filename2)) exitme("有同名文件或文件夹存在!",0);
if (!@rename($filename1,$filename2))
exitme("重命名失败!!",0);
else
{
inlog("重 命 名,把$filename1命名为$filename2,成功");
exitme("成功把 ".$file1." 重命名为 ".$file2);
}
}
//////////////保存文件/////////////////////
else if ($action == "savefile")
{
if (!$user["savefile"]) exitme1("你没有保存文件的权限");
if ($filename != checkfilename($filename)) exitme1("文件名有误!");
$filename=StripSlashes(dirname($path)."/".$filename);
$ftype = getext($filename);
if ($user["limit"]["$ftype"] && !$user["only"])
exitme1("不能保存为{$user["limittype"]}类型的文件!");
else if (!$user["limit"]["$ftype"] && $user["only"])
exitme1("不能保存为除{$user["limittype"]}类型以外的文件!");
$content=StripSlashes($content);
$fp=@fopen($filename,"w") or exitme1("打开文件失败!");
@fputs($fp,$content) or exitme1("保存数据失败!");
@fclose($fp) or exitme1("关闭文件失败!");
exitme1("文件".basename1($filename)."保存成功!");
}
///////////远程下载////////////////////
else if ($action == "savefromurl" && $user["savefromurl"])
{
if (!$path || !$url) exitme("请输入正确的参数!",0);
if (!$filename) $filename = basename1($url);
if ($filename != checkfilename($filename)) exitme("下载失败:文件名有误!",0);
checktype($filename,"下载");
if (file_exists($path.$filename)) exitme('下载失败:有同名文件存在!',0);
$filename = dealpath($path.$filename);
if (@copy($url,$filename))
exitme("成功把 $filename 下载到服务器!");
else
exitme("下载失败:请确保文件地址正确!",0);
}
///////////////粘贴/////////////////////////
else if ($action=="paste")
{
if ($action1 != "cut" && $action1 != "copy") exitme("剪贴板无内容!",0);
$sfile=urldecode1($_COOKIE["sfile"]);
$sdir=urldecode1($_COOKIE["sdir"]);
$sfile=explode("|",$sfile);
$sdir=explode("|",$sdir);
$frompath=$_COOKIE["from"];
$cut=($action1=="cut");
$action2=($action1 == "cut")?"移动":"复制";
$from=array();
$to=array();
$ii=0;
$path=$_POST["path"];
$coverfile=$_POST["coverfile"];
$logstr= $action2."文件,从".$_COOKIE["from"]."到 ".$path.",";
if ($frompath == $path)
{
foreach($sfile as $f) if ($f) $sdir[]=$f;
for($i=0;$i<count($sdir);$i++)
{
if (!$sdir[$i]) continue;
$k=1;
$filename=$path."复件 ".$sdir[$i];
while (file_exists($filename))
{
$filename=$path."复件(".$k.") ".$sdir[$i];
$k++;
}
$from[$ii] = $frompath.$sdir[$i];
$to[$ii] = $filename;
$logstr.="dir:".$filename."|";
$ii++;
}
}
else if (!$cover)
{
for($i=0;$i<count($sdir);$i++)
{
if (!$sdir[$i]) continue;
$from[$ii] = $frompath.$sdir[$i];
$to[$ii] = $path.$sdir[$i];
$logstr.="dir:".$sdir[$i]."|";
$ii++;
}
for($i=0;$i<count($sfile);$i++)
{
if (!$sfile[$i]) continue;
$from[$ii] = $frompath.$sfile[$i];
$to[$ii] = $path.$sfile[$i];
$logstr.="file:".$sdir[$i]."|";
$ii++;
}
}
else if ($coverfile)
{
$arr=explode("|",$coverfile);
for($i=0;$i<count($arr);$i++)
{
if (!$arr[$i]) continue;
$from[$ii] = $frompath.$arr[$i];
$to[$ii] = $path.$arr[$i];
$logstr.="cover:".$arr[$i]."|";
$ii++;
}
}
else die;
$lb->copy($from,$to,$cover,$cut,$coverfiles) or exitme($action2."时发生错误!",0);
if (!$cover && is_array($coverfiles))
{
$coverfile="";
foreach($coverfiles as $i) $coverfile.=str_replace($path,"",$i)."|";
exitme("if (confirm('以下文件已经存在:\\n".str_replace("|","\\n",$coverfile)."要覆盖吗?')){sendcomm('paste',Array('path','cover','coverfile'),Array(path,'true','".$coverfile."'));}else{reloaddata(path);}","eval");
}
$eval="alert('".$action2."文件成功!');reloaddata('".$path."');";
$eval.=($action1 == "cut")?"reloaddata('".$frompath."');setcookie('from','');setcookie('action1','');setcookie('sdir','');setcookie('sfile','');":"";
exitme($eval,"eval");
}
/////////////////////////zip文件解压////////////////
else if ($action=="unpack" && $user["unpack"])
{
if (!file_exists($path.$file)) exitme("文件没有找到!",0);
if (!$key) exitme("参数错误",0);
unpackzip($path.$file,$path.$key,$indexes,$cover,$info);
if (!$cover && count($info["cover"])!=0)
{
$coverfiles="\\n";
$coverindex="|";
foreach($info["cover"] as $v)
if ($v)
{
$coverfiles.=$v["filename"]."\\n";
$coverindexes.=$v["index"]."|";
}
$eval="if (confirm('成功解压出 ".$info["dir"]."个目录 和 ".$info["file"]."个文件\\n";
$eval.="原始大小 ".dealsize(filesize($path.$file))." 解压后大小 ".dealsize($info["size"])."\\n";
$eval.="以下文件有同名文件存在".$coverfiles."要覆盖吗?')){alert('执行部分解压');}else{reloaddata(path);}";
exitme($eval,"eval");
}
$errors="";
foreach($info["error"] as $v) $errors.= $v."\\n";
$s= "成功解压出 ".$info["dir"]."个目录 和 ".$info["file"]."个文件\n";
$s.= "原文件大小 ".dealsize(filesize($path.$file))." 解压后大小 ".dealsize($info["size"]);
$s.=($errors)?"\n但是在解压文件:\n$errors时发生错误!":"";
exitme($s);
}
///////////////全部解压//////////////
else if ($action=="unpackall" && $user["unpack"])
{
if (!file_exists($path.$file)) exitme("文件没有找到!",0);
if (!$key) exitme("参数错误",0);
if (!$indexes) $indexes = -1;
unpackzip($path.$file,$path.$key,$indexes,$cover,$info);
if (is_dir($path.$key)) $info["folders"][]=$path.$key;
$info["folders"][]=$path;
if (!$cover && count($info["cover"])!=0)
{
$coverfiles="\\n";
$coverindex="|";
foreach($info["cover"] as $v)
if ($v)
{
$coverfiles.=$v["filename"]."\\n";
$coverindexes.=$v["index"]."|";
}
$eval='';
for($i=0;$i<count($info["folders"]);$i++)
{
$eval.="setTimeout(\"reloaddata('";
$eval.=$info["folders"][$i];
$eval.="')\",";
$eval.=$i*100;
$eval.=");";
}
$eval.="if (confirm('成功解压出 ".$info["dir"]."个目录 和 ".$info["file"]."个文件\\n";
$eval.="原始大小 ".dealsize($info["orig_size"])." 解压后大小 ".dealsize($info["size"])."\\n";
$eval.="以下文件有同名文件存在".$coverfiles."要覆盖吗?')){sendcomm('unpackall',Array('path','file','key','indexes','cover'),Array(path,'$file','$key','$coverindexes','1'));}else{reloaddata(path);}";
exitme($eval,"eval");
}
$eval='';
for($i=0;$i<count($info["folders"]);$i++)
{
$eval.="setTimeout(\"reloaddata('";
$eval.=$info["folders"][$i];
$eval.="')\",";
$eval.=$i*100;
$eval.=");";
}
$errors="";
foreach($info["error"] as $v) $errors.= $v."\\n";
$s= "alert('成功解压出 ".$info["dir"]."个目录 和 ".$info["file"]."个文件\\n";
$s.= "原文件大小 ".dealsize($info["orig_size"])." 解压后大小 ".dealsize($info["size"]);
$s.=($errors)?"\\n但是在解压文件:\\n$errors时发生错误!":"";
$s.="');";
exitme($eval.$s,"eval");
}
////////////////zip打包///////////////////////
else if ($action=="zippack" && $user["zippack"])
{
$sfile= urldecode1($_POST["sfile"]);
$sdir = urldecode1($_POST["sdir"]);
if (strtolower(substr($key,-4)) != ".zip") $key.=".zip";
if (@file_put_contents($path.$key,zippack($path,$sdir,$sfile)))
exitme("$key 压缩成功!");
else
exitme("$key 压缩失败",0);
}
///////////////输出目录属性/////////////////
else if ($action == "property" )
{
if (!is_dir($path)) exitme("目录不存在!",0);
$info=$lb->get_property($path);
$s = "文件夹:".$path."\n";
$s.= "目录数:".$info["dir"]."\n";
$s.= "文件数:".$info["file"]."\n";
$s.= "总大小:".dealsize($info["size"])."\n";
$s.= ($info["writable"])?"可写":"不可写";
exitme($s);
}
//////////没有权限 ////////
else
{
exitme("您没有此项操作的权限!",0);
}
function exitme($ss,$t=1)
{
global $action;
if ($action != "list") $ss = " ".$ss;
$ss = str_replace("\n"," \n ",$ss);
$s = '+';
if ($t === 1) $s.="OK";
else if ($t === "eval") $s.="Eval";
else $s.="Error";
$s = $s."==?".$ss."?==";
$r = (function_exists("iconv"))?@iconv('GB2312','UTF-8',$s):"";
if (trim($r) == "")
{
header("Content-type:TEXT/HTML;Charset=GB2312");
exit($s);
}
else
{
header("Content-type:TEXT/HTML;Charset=UTF-8");
exit($r);
}
}
function checkfilename($file)
{
if (!$file) return false;
$file = trim($file);
$a = substr($file,-1);
while ($a =="." || $a =="/" || $a == "\\")
{
$file=substr($file,0,-1);
$a = substr($file,-1);
}
$a = substr($file,0,1);
while ($a =="." || $a =="/" || $a == "\\")
{
$file=substr($file,1,strlen($file));
$a = substr($file,0,1);
}
$arr = array("../","./","/","\\","..\\",".\\");
$file = str_replace($arr,"",$file);
return $file;
}
function exitme1($s)
{
exit("<script language=javascript>alert('".$s."');window.close();</script>");
}
function checktype($filename,$s)
{
global $user;
$ftype = getext($filename);
if ($user["limit"]["$ftype"] && !$user["only"])
exitme("不能{$s}{$user["limittype"]}类型的文件!",0);
else if (!$user["limit"]["$ftype"] && $user["only"])
exitme("不能{$s}除{$user["limittype"]}类型以外的文件!",0);
}
?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -