open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true){return false;} foreach($valid_files as $file){$zip->addFile($file,$file);} $zip->close(); return file_exists($destination); }else{return false;} } /* 解包.zip文件函数 */ function unzip_file(string $zipName,string $dest){ if(!is_file($zipName)){return '1003';} if(!is_dir($dest)){return '1002';} else{ $zip=new ZipArchive(); if($zip->open($zipName)){ $zip->extractTo($dest); $zip->close(); return '200'; }else{return '1001';} } } /* 删除目录函数 */ function unlinkDir($dir){ $files=scandir($dir); foreach ($files as $key => $filename) { if($filename!="."&&$filename!=".."){ if(is_dir($dir."/".$filename)){unlinkDir($dir."/".$filename);}else{unlink($dir."/".$filename);} } } rmdir($dir); } /* 支持同时创建多层目录函数 */ function nbMkdir($pathname){ $paths = explode("/", $pathname); $nowp = ""; foreach($paths as $key=>$value) { $nowp .= $value . "/"; if ($value == "." || $value == ".." || $value == "") continue; mkdir($nowp); } } /* 复制文件(夹)函数 */ function copyDir($from,$to){ if(!is_dir($to)){nbMkdir($to);} echo $from."|md|".$to.PHP_EOL; $currDir=$from; $currFiles=scandir($currDir); foreach($currFiles as $filename){ if($filename!="."&&$filename!=".."){ $trueFileName=$currDir.$filename; if(is_dir($trueFileName)){copyDir($trueFileName.'/',$to.$filename.'/');} else{copy($trueFileName,$to.$filename);} } } } /* 计算目录体积函数 */ function dirsize($dir){ @$dh=opendir($dir);$size=0; while($file = @readdir($dh)){ if($file!="." && $file!=".."){ $path = $dir."/".$file; if (is_dir($path)){$size+=dirsize($path);}elseif(is_file($path)){$size += filesize($path);} } } @closedir($dh);return $size; } /* 主体 PHP 操作 */ $ACT=$_POST["a"];$PWD=$_POST["pwd"]; if($ACT){ /* 进行登录 */ if($ACT=="login"){ if($_POST["loginPwd"]==$PASSWORD){echo "200||".password_hash($PASSWORD.date("Ymd"),PASSWORD_DEFAULT);}else{echo "1001";} /* 如果密码验证成功 */ }elseif(password_verify($PASSWORD.date("Ymd"),$PWD)){ /* 页面加载时验证状态,密码正确时始终返回成功 */ if($ACT=="check"){ echo "200"; /* 返回指定目录的文件列表 */ }elseif($ACT=="files"){ /* 阻止用户访问上级目录 */ if(strstr($_POST["name"],"./")){ echo "1002"; /* 如果请求过来的文件夹存在,则输出内容 */ }elseif(is_dir(".".$_POST["name"])){ $fileArray=scandir(".".$_POST["name"]); $fileArrayModified=[]; /* 先输出目录列表 */ foreach($fileArray as $filename){ $fileisdir=is_dir(".".$_POST["name"].$filename); if($fileisdir){ $filesize=0; array_push($fileArrayModified,array("name"=>$filename,"dir"=>$fileisdir,"size"=>$filesize)); } } /* 再输出文件列表 */ foreach($fileArray as $filename){ $fileisdir=is_dir(".".$_POST["name"].$filename); if(!$fileisdir){ $filesize=filesize(".".$_POST["name"].$filename)/1024; array_push($fileArrayModified,array("name"=>$filename,"dir"=>$fileisdir,"size"=>$filesize)); } } /* 此处遍历两次是要按顺序输出,先目录再文件夹,便于管理+美观 */ echo "200||".rawurlencode(json_encode($fileArrayModified)); }else{ echo "1001"; } /* 输出textEditor需要的文本内容 */ }elseif($ACT=="getfile"){ /* 此处为js加密适配,如果请求的文件有同名的.fajs文件存在,则输出.fajs中没加密的内容便于用户进行编辑,如果没有就直接输出原文件内容 */ if(file_exists(".".$_POST["name"].".fajs")){echo file_get_contents(".".$_POST["name"].".fajs");}else{echo file_get_contents(".".$_POST["name"]);} /* 使用textEditor保存普通文件 */ }elseif($ACT=="save"){ file_put_contents(".".$_POST["name"],$_POST["data"]); /* 这里如果有同名fajs文件则进行删除,因为这个方法是没有加密时进行的,如果fajs不删,下次输出的还是老的fajs文件就对不上了 */ if(file_exists(".".$_POST["name"].".fajs")){unlink(".".$_POST["name"].".fajs");} if(file_exists(".".$_POST["name"]) && file_get_contents(".".$_POST["name"]) == $_POST["data"]){echo "200";}else{echo "1002";} /* 使用textEditor保存加密的js文件,这里会存俩文件,fa本身没有解密js的能力所以原文件一定要存一份 */ }elseif($ACT=="fajssave"){ /* 这里原文件存进同名fajs,加密文件存进js,这样方便管理而且用不着用户自己去改资源地址 */ file_put_contents(".".$_POST["name"],$_POST["obfuscate"]); file_put_contents(".".$_POST["name"].".fajs",$_POST["original"]); if(file_exists((".".$_POST["name"])) && file_get_contents(".".$_POST["name"]) == $_POST["obfuscate"] && file_get_contents(".".$_POST["name"].".fajs") == $_POST["original"]){echo "200";}else{echo "1002";} /* 对当前目录进行打包 */ }elseif($ACT=="zip"){ $zipResult=create_zip(scandirAll(realpath(".".$_POST["name"]),true),".".$_POST["name"]."FileAdmin_".time().".zip",false); if($zipResult){echo "200";}else{echo "1001";} /* 解包压缩包 */ }elseif($ACT=="unzip"){ echo unzip_file(".".$_POST["name"],".".$_POST["dir"],false); /* 新建目录 */ }elseif($ACT=="mkdir"){ mkdir(".".$_POST["name"]); if(file_exists(".".$_POST["name"])){echo "200";}else{echo "1002";} /* 给文件(夹)改名 */ }elseif($ACT=="rename"){ /* 这里判断一下是不是存在同名的文件,否则就直接覆盖掉了,寄 */ if(!file_exists(".".$_POST["dir"].$_POST["new"])){ rename(".".$_POST["dir"].$_POST["old"],".".$_POST["dir"].$_POST["new"]); if(file_exists(".".$_POST["dir"].$_POST["new"])){ echo "200"; }else{ echo "1003"; } }else{ echo "1002"; } /* 删除文件(夹) */ }elseif($ACT=="del"){ $delFiles=json_decode(rawurldecode($_POST["files"])); foreach($delFiles as $filename){ $trueFileName=".".$_POST["dir"].$filename; /* 这里进行判断,如果是文件就直接干掉,是目录就用上面的unlinkDir干掉 */ if(is_dir($trueFileName)){unlinkDir($trueFileName);}else{unlink($trueFileName);} if(file_exists($trueFileName)){echo "1";} } echo "200"; /* 检查本体更新 */ }elseif($ACT=="chkupd"){ /* 从我站api服务获取最新版本,如果和当前版本不同就弹更新 */ $latest=file_get_contents("https://api.simsoft.top/fileadmin/latest/?stamp=".time()); if($latest && $latest!=$VERSION){ /* 获取这次版本的内容 */ $updinfo=file_get_contents("https://api.simsoft.top/fileadmin/updateinfo/?stamp=".time()); if($updinfo){ echo $updinfo; }else{echo "1002";} }else{echo "1001";} /* 应用版本更新 */ }elseif($ACT=="applyversion"){ /* 先从我站下载一个FileAdminUpdater.php用于替换主文件,因为自己更新本体试了会出问题 */ $updater=file_get_contents("https://api.simsoft.top/fileadmin/updater/?stamp=".time()); if($updater){ file_put_contents("./FileAdminUpdater.php",$updater); header("location: ./FileAdminUpdater.php?famain=".end(explode("/",$_SERVER['PHP_SELF']))); /* 进行一下重定向,更新完updater会自删,基本没有安全隐患 */ }else{echo "1001";} /* 进行文件复制 */ }elseif($ACT=="copy"){ $operateFiles=json_decode(rawurldecode($_POST["files"])); foreach($operateFiles as $filename){ $fromfile=".".$_POST["from"].$filename; $tofile=".".$_POST["to"].$filename; if(is_dir($fromfile)){copyDir($fromfile.'/',".".$_POST["to"].$filename."/");}else{copy($fromfile,$tofile);} } /* 进行文件移动,这个比较简单直接遍历rename就完了 */ }elseif($ACT=="move"){ $operateFiles=json_decode(rawurldecode($_POST["files"])); foreach($operateFiles as $filename){ $fromfile=".".$_POST["from"].$filename; $tofile=".".$_POST["to"].$filename; rename($fromfile,$tofile); } /* 通过文件内容搜索文件 */ }elseif($ACT=="find_by_content"){ $trueDirName=".".implode("/",explode("/",$_POST["dir"])); $filelist=scandirAll($trueDirName); $searchedFiles=[]; /* 这个地方设置用户填的文件类型,空格分隔的;用textFile这个名字是因为初期只能搜索文本后来懒得改变量名了 */ $textFiles=explode(" ",$_POST["type"]); /* 文件列表进行遍历 */ foreach($filelist as $filenameFound){ /* 如果post过来type是空的(即用户想搜索所有类型的文件),或者文件类型在允许列表里边,就进行处理,否则不输出 */ if($_POST["type"]=='' || in_array(strtolower(end(explode(".",$filenameFound))),$textFiles)){ $filedata=file_get_contents($filenameFound); /* 判断文件内容里是否含搜的东西,case用于指定大小写 */ if($_POST["case"]=="1"){$fileInNeed=strstr($filedata,$_POST["find"]);}else{$fileInNeed=stristr($filedata,$_POST["find"]);} /* 如果文件符合就push到输出的内容里 */ if($fileInNeed){array_push($searchedFiles,str_replace("./","/",$filenameFound));} } } echo "200||".rawurlencode(json_encode($searchedFiles)); /* 通过文件名搜索文件,工作原理和上面的完全一致就不写注释了 */ }elseif($ACT=="find_by_name"){ $trueDirName=".".implode("/",explode("/",$_POST["dir"])); $filelist=scandirAll($trueDirName); $textFiles=explode(" ",$_POST["type"]); $searchedFiles=[]; foreach($filelist as $filenameFound){ if($_POST["type"]=='' || in_array(strtolower(end(explode(".",$filenameFound))),$textFiles)){ if($_POST["case"]=="1"){$fileInNeed=strstr($filenameFound,$_POST["find"]);}else{$fileInNeed=stristr($filenameFound,$_POST["find"]);} if($fileInNeed){array_push($searchedFiles,str_replace("./","/",$filenameFound));} } } echo "200||".rawurlencode(json_encode($searchedFiles)); /* 进行文件替换,工作原理也差不多 */ }elseif($ACT=="replace"){ $trueDirName=".".implode("/",explode("/",$_POST["dir"])); $filelist=scandirAll($trueDirName); $replaceCount=0; $textFiles=explode(" ",$_POST["type"]); foreach($filelist as $filenameFound){ if($_POST["type"]=='' || in_array(strtolower(end(explode(".",$filenameFound))),$textFiles)){ $filedata=file_get_contents($filenameFound); $fileInNeed=strstr($filedata,$_POST["find"]); if($fileInNeed){ $replaceCount++; $newFiledata=str_replace($_POST["find"],$_POST["replace"],$filedata); file_put_contents($filenameFound,$newFiledata); } } } echo "200||".$replaceCount; /* 获取当前目录的占用信息 */ }elseif($ACT=="space"){ if(is_dir(".".$_POST["name"])){ $total=disk_total_space(".".$_POST["name"]); $free=disk_free_space(".".$_POST["name"]); $used=$total-$free; $current=dirsize(".".$_POST["name"]); echo "200||".$total."||".$free."||".$used."||".$current; }else{echo "1001";} } }else{echo "1000";} /* 下载文件 */ }elseif(password_verify($PASSWORD.date("Ymd"),$_GET["pwd"]) && $_GET["a"]=="down"){ /* 指定大小以便浏览器显示进度条,但是大文件还是会玄学失效,原因未知 */ header("content-length: ".filesize(".".$_GET["name"])); /* 要求浏览器下载文件 */ header("content-disposition: attachment;filename=".rawurlencode(end(explode("/",$_GET["name"])))); echo file_get_contents(".".$_GET["name"]); /* 上传文件 */ }elseif(password_verify($PASSWORD.date("Ymd"),$_GET["pwd"]) && $_GET["a"]=="upload"){ $destDir=".".$_GET["dir"]; if(!is_dir($destDir)){nbMkdir($destDir);} if(file_exists($destDir.$_FILES["file"]["name"])){echo "1002";}else{ move_uploaded_file($_FILES["file"]["tmp_name"],$destDir.$_FILES["file"]["name"]); if(file_exists($destDir.$_FILES["file"]["name"])){echo "200";}else{echo "1001";} } /* 在加载时获取版本信息 */ }elseif($_GET["a"]=="ver"){ $latest=file_get_contents("https://api.simsoft.top/fileadmin/latest/?stamp=".time()); if($latest && $latest!=$VERSION){echo "1001";}else{echo "v".$VERSION;} }elseif($_GET["a"]=="css"){ header("content-type: text/css"); ?>/* */ /* FileAdmin
FileAdmin
正在获取
·
·
·
登录 FileAdmin
/

正在上传 ψ(._. )>
当前上传:
当前进度:
当前速度:
目标目录:根目录
等待上传: 个文件
<
>
"
'
=
HTM
检测到更新
主题样式
(•ω•`)扔给我即可上传
支持同时上传多个文件哦