2024-10-10

This commit is contained in:
2024-10-10 12:56:56 +08:00
commit 7b347c848a
2648 changed files with 643965 additions and 0 deletions

113
web/admin/backup.php Normal file
View File

@@ -0,0 +1,113 @@
<?php
require_once("admin-header.php");
if (!(isset($_SESSION[$OJ_NAME.'_'.'administrator']))){
echo "<a href='../loginpage.php'>Please Login First!</a>";
exit(1);
}
?>
<div class="container">
<br>
<br>
<br>
<br>
<?php
if(isset($_POST['do'])){
require_once(dirname(__FILE__)."/../include/backup.php");
$target=$OJ_DATA."/0/".$DB_NAME."_".(date('Y-m-d H:i:s')).".sql";
$db_file=basename($target);
$dirpath=dirname($target);
if (!file_exists($dirpath)) {
mkdir($dirpath);
}
$config = array(
'host' => $DB_HOST,
'port' => 3306,
'user' => $DB_USER,
'password' => $DB_PASS,
'database' => $DB_NAME,
'charset' => 'utf-8',
'target' => $target
);
$bak = new DatabaseTool($config);
$bak->backup();
function addDirToZip($path, $zip) {
global $OJ_DATA;
if ($path=="data/0") return;
$handler = opendir($path); //打开当前文件夹由$path指定。
/*
循环的读取文件夹下的所有文件和文件夹
其中$filename = readdir($handler)是每次循环的时候将读取的文件名赋值给$filename
为了不陷于死循环,所以还要让$filename !== false。
一定要用!==,因为如果某个文件名如果叫'0'或者某些被系统认为是代表false用!=就会停止循环
*/
while (($filename = readdir($handler)) !== false) {
if ($filename != "." && $filename != "..") {//文件夹文件名字为'.'和‘..’,不要对他们进行操作
if (is_dir($path . "/" . $filename)) {// 如果读取的某个对象是文件夹,则递归
addDirToZip($path . "/" . $filename, $zip);
} else { //将文件加入zip对象
$zip->addFile($path . "/" . $filename);
}
}
}
@closedir($path);
}
$zip = new ZipArchive();
$ztar=dirname($target)."/backup_".(date('Y-m-d H:i:s')).".zip";;
//echo $ztar;
if ($zip->open($ztar, ZipArchive::CREATE) === TRUE) {
chdir( dirname($OJ_DATA) );
if(is_dir("data"))
addDirToZip("data", $zip); //测试数据
chdir(realpath(dirname(dirname(__FILE__))));
if($OJ_SaaS_ENABLE && $DOMAIN!=$domain){
if(is_dir("upload/$domain"))
addDirToZip("upload/$domain", $zip); //子域题目图片
}else{
if(is_dir("upload/"))
addDirToZip("upload", $zip); //题目图片
}
chdir($OJ_DATA."/0");
if(file_exists($db_file)){
$zip->addFile($db_file);
}
$zip->close(); //关闭处理的zip文件
}
?>
<?php
}else{
?>
<br>
<br>
<form method="post" action="backup.php">
<input type="submit" name="do" value="Backup">
</form>
<?php
}
?>
<button onclick="phpfm(0)" >查看备份文件</button>
<script src='../template/bs3/jquery.min.js' ></script>
<script>
function phpfm(pid){
//alert(pid);
$.post("phpfm.php",{'frame':3,'pid':pid,'pass':''},function(data,status){
if(status=="success"){
document.location.href="phpfm.php?frame=3&pid="+pid;
}
});
}
</script>
</div>