Files
hustoj/web/admin/backup.php
2026-04-10 16:36:57 +08:00

114 lines
3.2 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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/syzoj/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>